亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? routeutillib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
     *     * This search also finds the neighboring routes within the matching     * group based on any specified weight value.     */    for (pTemp = pGroup; pTemp != NULL; pTemp = pTemp->sameNode.pFrwd)        {        /*         * Save the first entry which matches the specified gateway.         * The second condition is not strictly necessary, since each         * gateway value is unique, but bypasses needless tests once         * a match is found.         */        if (gatewayFlag && pMatch == NULL)            {            if (ROUTE_ENTRY_GATEWAY (pTemp)->sa_family == AF_LINK)                {                /*                 * The gateway field contains an ARP template. The entry                 * only matches for a search using the interface's assigned                 * IP address as the gateway.                 */                if (SOCKADDR_IN (pTemp->rtEntry.rt_ifa->ifa_addr)                                        == SOCKADDR_IN (pGateway))                    {                    /* Specified route entry exists - save the match. */                    pMatch = pTemp;                    }                }            else if (SOCKADDR_IN (ROUTE_ENTRY_GATEWAY (pTemp))                                        == SOCKADDR_IN (pGateway))                {                /* Specified route entry exists - save the match. */                pMatch = pTemp;                }            }        if (gatewayFlag == FALSE && pMatch == NULL)             {            /* Use the initial entry if no gateway is specified. */            pMatch = pGroup;            }        /*         * The delete operation does not provide a weight value. Save         * the neighboring route for the add and change operations.         */        if (weight && pNext == NULL &&                weight < pTemp->rtEntry.rt_rmx.weight)            {            pNext = pTemp;            }        /* Halt the search after finding the matching entry and location. */        if (pMatch && pNext)            break;        /*         * Save the current route, which eventually stores the last         * entry in the list. That value is only needed if the weight         * is larger than all existing entries in the group.         */        pBack = pTemp;        }    /*     * Save the correct predecessor if the weight does not place the     * corresponding route at the end of the list. That value will     * equal NULL if the new position is the head of the list.     *     * Otherwise, the preceding entry already equals the last item in the     * list (which occurs when appending a new route with the maximum weight     * to an existing group) or remains NULL (if the group does not exist).     * No correction is needed in either case.     */    if (pNext)        {        pBack = pNext->sameNode.pBack;        }    /*     * Update the chosen adjacent group, if needed. The results of the     * previous search are only valid if the weight value corresponds     * to the initial entry in a group, the selected route is not part     * of the first group, and the weight is reduced enough to alter     * the relative position of the selected group.     */    if (pNext == pGroup)        {        /*         * The specified weight corresponds to the initial entry in         * a group, so either the weight of the group is reduced or it         * corresponds to the first entry in a new group. Update the         * neighboring groups selected with the earlier search if needed.         */        if (pGroup && pNextGroup == NULL)            {            /*             * The group exists and no successor is assigned, so the             * earlier search found a matching group before detecting             * a different group with a higher weight than the specified             * value. This condition indicates that the reduced weight does             * not change the relative location of the matching group.             */            pNextGroup = pGroup->diffNode.pFrwd;            pLastGroup = pGroup->diffNode.pBack;            }        }    /*     * Finish assigning the adjacent group, if needed. The earlier search     * only selects an adjacent group when the specified weight value is     * less than the weight of the initial entry in the matching group or     * is the first entry in a new group.     */    if (pNext != pGroup && weight)        {        /*         * Find the correct adjacent group for an unchanged weight or an         * increase in the weight value of an entry in an existing group.         */        if (pMatch == NULL || pMatch != pGroup)            {            /*             * If the selected route is not the initial entry, it is             * not connected to any adjacent groups.             */            pLastGroup = pNextGroup = NULL;            }        else if (weight == pMatch->rtEntry.rt_rmx.weight)            {            /*             * The earlier search only finds an adjacent group when the             * weight of the group is reduced. Set the correct adjacent             * groups since the location in the group list is unchanged.             */            pNextGroup = pGroup->diffNode.pFrwd;            pLastGroup = pGroup->diffNode.pBack;            }        else            {            /*             * The initial entry in the group list uses an increased             * weight. Set the correct weight value and find the new             * adjacent group.             */            pTemp = pMatch->sameNode.pFrwd;            nextWeight = weight;            /*             * Use the weight value of the next initial group entry if              * the new weight will change the location of the current             * initial entry in the group.               */            if (pTemp && weight > pTemp->rtEntry.rt_rmx.weight)                nextWeight = pTemp->rtEntry.rt_rmx.weight;            if (pMatch->rtEntry.rt_rmx.weight == nextWeight)                {                /*                 * The next entry in the list used the same weight                 * as the initial entry, so the position is unchanged.                 */                pNextGroup = pGroup->diffNode.pFrwd;                pLastGroup = pGroup->diffNode.pBack;                }            else                {                /*                 * The minimum weight of the group increased. Find the                 * new location.                 */                for (pTemp = pGroup; pTemp != NULL;                         pTemp = pTemp->diffNode.pFrwd)                    {                    if (nextWeight < pTemp->rtEntry.rt_rmx.weight)                        {                        pNextGroup = pTemp;                        break;                        }                    /*                     * Save the current entry in case the next entry                     * is the correct successor.                     */                    pLastGroup = pTemp;                    }                /*                 * Set the preceding group to the correct value if the                 * increased weight does not change the relative location                 * of the group.                 */                if (pLastGroup == pGroup)                    pLastGroup = pGroup->diffNode.pBack;                }            }        }    /*     * Correct the adjacent route within the matching group, if needed.     * That search places a route after any other entries with the same     * weight. This behavior is not correct when the weight of an existing     * entry does not change.     */    if (pMatch && weight == pMatch->rtEntry.rt_rmx.weight)        {        pNext = pMatch->sameNode.pFrwd;        pBack = pMatch->sameNode.pBack;        }    /*     * Save the initial entry in the group and any adjacent entries in     * the supplied parameters. The delete operation does not retrieve     * any neighboring routes or specify the weight needed to assign     * those values.     */    if (ppGroup)        *ppGroup = pGroup;    if (ppLastGroup)        *ppLastGroup = pLastGroup;    if (ppNextGroup)        *ppNextGroup = pNextGroup;    if (ppLast)        *ppLast = pBack;    if (ppNext)        *ppNext = pNext;    return (pMatch);    }/********************************************************************************* routeDescFill - copies the relevant routing information ** This routine copies routing information from a ROUTE_ENTRY structure* to the corresponding fields in a ROUTE_DESC structure. The callback* messages and the results of the public lookup routine use the resulting* structure. The delete operation provides a <copyAllFlag> parameter of* FALSE since it already assigns the destination and netmask of the given* <pRouteDesc> structure. All other operations set that parameter to TRUE* to get all relevant values from the route entry which the <pRoute>* parameter provides.** RETURNS: N/A** NOMANUAL*/void routeDescFill    (    ROUTE_ENTRY * pRouteEntry, 	/* reference to existing route */    ROUTE_DESC * pRouteDesc, 	/* buffers for route information */    BOOL copyAllFlag 		/* copy all information? */    )    {    if (copyAllFlag)        {        if (ROUTE_ENTRY_KEY (pRouteEntry) != NULL)            bcopy ( (char*) (ROUTE_ENTRY_KEY (pRouteEntry)),                   (char*) (pRouteDesc->pDstAddr), sizeof (struct sockaddr));        if ( (ROUTE_ENTRY_MASK (pRouteEntry) != NULL) &&            (pRouteDesc->pNetmask != 0))            bcopy ( (char*)ROUTE_ENTRY_MASK (pRouteEntry),                   (char*)pRouteDesc->pNetmask, sizeof (struct sockaddr));        else  /* If it is a host route, set netmask to NULL */            pRouteDesc->pNetmask = NULL;        }    if ( (ROUTE_ENTRY_GATEWAY (pRouteEntry))->sa_family == AF_LINK)	{        bcopy ( (char*)pRouteEntry->rtEntry.rt_ifa->ifa_addr,               (char*)pRouteDesc->pGateway, sizeof (struct sockaddr));        }    else	{        bcopy ( (char*)ROUTE_ENTRY_GATEWAY (pRouteEntry),               (char*)pRouteDesc->pGateway, sizeof (struct sockaddr));        }    pRouteDesc->flags = ROUTE_ENTRY_FLAGS (pRouteEntry);    pRouteDesc->protoId = RT_PROTO_GET (ROUTE_ENTRY_KEY (pRouteEntry));    pRouteDesc->pIf = pRouteEntry->rtEntry.rt_ifp;    pRouteDesc->value1 = pRouteEntry->rtEntry.rt_rmx.value1;    pRouteDesc->value2 = pRouteEntry->rtEntry.rt_rmx.value2;    pRouteDesc->value3 = pRouteEntry->rtEntry.rt_rmx.value3;    pRouteDesc->value4 = pRouteEntry->rtEntry.rt_rmx.value4;    pRouteDesc->value5 = pRouteEntry->rtEntry.rt_rmx.value5;    pRouteDesc->routeTag = pRouteEntry->rtEntry.rt_rmx.routeTag;    pRouteDesc->weight = pRouteEntry->rtEntry.rt_rmx.weight;    pRouteDesc->primaryRouteFlag = pRouteEntry->primaryRouteFlag;    return;    }/********************************************************************************* routeMetricsCopy - copies the extra metric information** This routine copies all the additional metric information from* a ROUTE_DESC structure to a ROUTE_ENTRY structure. It completes* the modification of an existing entry and stores the initial data* when creating a new route entry.** RETURNS: N/A** NOMANUAL*/void routeMetricsCopy    (    ROUTE_DESC * pRouteDesc, 	/* buffers with new settings for route */    ROUTE_ENTRY * pRouteEntry 	/* reference to existing route entry */    )    {    pRouteEntry->rtEntry.rt_rmx.value1 = pRouteDesc->value1;    pRouteEntry->rtEntry.rt_rmx.value2 = pRouteDesc->value2;    pRouteEntry->rtEntry.rt_rmx.value3 = pRouteDesc->value3;    pRouteEntry->rtEntry.rt_rmx.value4 = pRouteDesc->value4;    pRouteEntry->rtEntry.rt_rmx.value5 = pRouteDesc->value5;    pRouteEntry->rtEntry.rt_rmx.routeTag = pRouteDesc->routeTag;    pRouteEntry->rtEntry.rt_rmx.weight = pRouteDesc->weight;       return;    }/********************************************************************************* routeEntryFree - free a ROUTE_ENTRY structure** This routine removes a duplicate route entry. It executes when that* entry is specifically deleted or when a new copy of the entry is* installed as the visible route because of a weight change.** It also executes within the internal rtfree() routine of the kernel.* That usage allows the original code to handle the reference counts* for duplicate and visible route entries. Since the current library* does not permit multiple references to the duplicate routes, this* ability is only important if future versions provide that feature.** When executing within the rtfree() routine, the <countFlag> parameter* is FALSE since that routine decrements the reference count for the* associated interface address. That value is also FALSE when this* routine releases a partial route before the reference count increases.** RETURNS: N/A ** NOMANUAL*/void routeEntryFree    (    ROUTE_ENTRY * pRouteEntry, 	/* existing duplicate route entry */    BOOL 	countFlag 	/* decrement interface reference count? */    )    {    if (countFlag && pRouteEntry->rtEntry.rt_ifa)        pRouteEntry->rtEntry.rt_ifa->ifa_refcnt--;    if(pRouteEntry->rtEntry.rt_genmask)	KHEAP_FREE( (char *)pRouteEntry->rtEntry.rt_genmask);    if(pRouteEntry->rtEntry.rt_nodes[0].rn_u.rn_leaf.rn_Mask)	KHEAP_FREE(pRouteEntry->rtEntry.rt_nodes[0].rn_u.rn_leaf.rn_Mask);    KHEAP_FREE( (char *)pRouteEntry);    }#endif /* ROUTER_STACK */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲精品乱码久久久久久蜜桃| 欧美成人三级电影在线| 欧美一区二区精品在线| 国产亚洲福利社区一区| 一区二区欧美视频| 国产精品自拍一区| 欧美一区二区在线视频| 亚洲免费色视频| 国产成人亚洲综合a∨猫咪| 欧美精品v国产精品v日韩精品| 国产精品婷婷午夜在线观看| 青娱乐精品在线视频| 欧美专区亚洲专区| 1024亚洲合集| 成人免费毛片高清视频| 欧美zozo另类异族| 秋霞国产午夜精品免费视频| 欧美丝袜丝交足nylons| 亚洲精品五月天| 91无套直看片红桃| 国产精品女同一区二区三区| 国产在线不卡视频| 精品粉嫩超白一线天av| 肉肉av福利一精品导航| 欧美在线短视频| 亚洲一区二区三区美女| 色综合久久88色综合天天免费| 欧美精彩视频一区二区三区| 国产在线精品一区二区夜色| 欧美成人伊人久久综合网| 日韩精品视频网站| 欧美一区二区在线不卡| 日韩黄色一级片| 91精品在线观看入口| 日本三级亚洲精品| 欧美电影免费观看高清完整版 | 国产精品不卡一区| 国产99精品在线观看| 国产欧美日韩综合精品一区二区| 国产一区二区在线视频| 国产日产欧美一区二区视频| 国产成人在线视频播放| 日韩美女视频19| 欧美中文字幕一二三区视频| 亚洲va韩国va欧美va精品| 欧美一区二区三区日韩| 狠狠狠色丁香婷婷综合激情 | 色综合一区二区| 亚洲国产综合色| 日韩欧美在线1卡| 国产成人av福利| 亚洲视频在线观看一区| 欧美日本精品一区二区三区| 美女www一区二区| 欧美激情艳妇裸体舞| 91麻豆蜜桃一区二区三区| 午夜亚洲国产au精品一区二区| 91精品国产福利| 顶级嫩模精品视频在线看| 精品一区二区三区蜜桃| 91久久精品午夜一区二区| 亚洲国产成人av| 精品国产麻豆免费人成网站| 国产成人精品在线看| 亚洲一区二区不卡免费| 欧美一区二区三区在线观看| 国产传媒一区在线| 亚洲一区二区在线播放相泽| 久久综合精品国产一区二区三区| 99re这里都是精品| 日本大胆欧美人术艺术动态| 国产精品网站导航| 欧美一区二区三级| 97精品电影院| 黑人精品欧美一区二区蜜桃 | 中文字幕不卡在线播放| 在线观看不卡视频| 国产馆精品极品| 三级亚洲高清视频| 亚洲欧美一区二区三区国产精品| 欧美一区二区视频观看视频| 91在线观看高清| 国产一区啦啦啦在线观看| 亚洲高清免费视频| 中国av一区二区三区| 日韩一区和二区| 色一区在线观看| 成人av在线影院| 久久99国产精品尤物| 亚洲成人动漫在线观看| 中文字幕亚洲在| 久久蜜臀精品av| 日韩欧美国产成人一区二区| 欧美日韩精品一区二区天天拍小说 | 在线日韩一区二区| 成人小视频免费观看| 六月丁香婷婷色狠狠久久| 亚洲一区二区四区蜜桃| 中文字幕一区二区三区视频| 精品国产伦一区二区三区免费| 4438x成人网最大色成网站| 欧美在线观看视频一区二区 | 国产精品一区免费在线观看| 婷婷国产v国产偷v亚洲高清| 亚洲欧美电影一区二区| 国产精品美女久久福利网站| 国产亚洲美州欧州综合国| 精品电影一区二区| 日韩精品一区二区三区在线观看 | 欧美日韩在线观看一区二区| 国产传媒日韩欧美成人| 国产成人欧美日韩在线电影| 国内外成人在线| 久久99精品网久久| 另类的小说在线视频另类成人小视频在线 | 欧美激情一区二区三区在线| 久久久久久日产精品| 精品电影一区二区三区| 久久天堂av综合合色蜜桃网| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 成人禁用看黄a在线| 国产成+人+日韩+欧美+亚洲| 国产九色sp调教91| 成人h版在线观看| 在线免费av一区| 欧美日韩一二区| 欧美成人性福生活免费看| 久久久精品综合| 国产精品久久影院| 亚洲国产精品一区二区久久恐怖片| 一区二区三区四区乱视频| 性欧美大战久久久久久久久| 免费观看在线综合| 国产精品一区专区| 色av一区二区| 日韩免费性生活视频播放| 久久久99精品免费观看不卡| 亚洲欧美中日韩| 亚洲bt欧美bt精品| 韩国av一区二区| 色婷婷综合中文久久一本| 欧美丰满少妇xxxbbb| 亚洲精品在线观看网站| 国产精品国产三级国产aⅴ中文| 亚洲日本在线视频观看| 日韩电影免费在线| 国产成人免费视| 在线观看免费视频综合| 久久久久久毛片| 亚洲.国产.中文慕字在线| 国产成人无遮挡在线视频| 色菇凉天天综合网| 91精品国产乱码| 亚洲日本一区二区三区| 蜜臀av一区二区| 色欧美88888久久久久久影院| 日韩久久免费av| 亚洲午夜国产一区99re久久| 国产一区二区三区不卡在线观看| 一本久久精品一区二区 | 欧美理论在线播放| 久久久精品免费免费| 亚洲电影你懂得| 岛国精品一区二区| 日韩欧美综合在线| 亚洲午夜久久久久久久久电影网 | 一区二区三区在线高清| 久久福利视频一区二区| 91官网在线免费观看| 久久久久久久网| 天堂午夜影视日韩欧美一区二区| 99免费精品在线观看| 精品国产一区二区精华| 午夜精品一区二区三区三上悠亚| av福利精品导航| 国产日韩欧美高清在线| 男女视频一区二区| 欧美欧美午夜aⅴ在线观看| 成人免费视频在线观看| 成人免费黄色在线| 久久综合久久鬼色中文字| 蜜臀va亚洲va欧美va天堂 | 欧美无砖专区一中文字| 亚洲日本成人在线观看| 国产一区二区三区久久久| 精品三级在线看| 麻豆国产精品视频| 欧美一区二区三区精品| 日韩一区精品视频| 欧美日韩一本到| 亚洲444eee在线观看| 欧美日韩国产高清一区二区三区| 亚洲影视在线观看| 欧美在线观看视频一区二区| 亚洲精品国产精华液| 一本到三区不卡视频| 一卡二卡欧美日韩| 欧美午夜理伦三级在线观看| 亚洲第一久久影院| 欧美日本在线一区|