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

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

?? rdisclib.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* rdiscLib.c - ICMP router discovery server library *//* Copyright 1984 - 2001 Wind River Systems, Inc. */#include "copyright_wrs.h" /*modification history--------------------01a,29mar01,spm  file creation: copied from version 01g of tor2_0.open_stack                 branch (wpwr VOB) for unified code base*//*DESCRIPTIONrdiscLib contains code to implement ICMP Router Discovery. This featureallows routers to advertise an address to the hosts on each of the routersinterfaces.  This address is placed by the host into its route table asa default router.  A host may also solicit the address by multicastingthe request to the ALL_ROUTERS address (224.0.0.2), to which a routerwould respond with a unicast version of the advertisement.There are three routines in this implementation of router discovery:rdiscInit(), rdisc() and rdCtl().  rdiscInit() is the initializationroutine, rdisc() handles the periodic transmission of advertisementsand processing of solicitations, and rdCtl() sets/gets user parameters.*/ /* includes */#include "vxWorks.h"#include "rdiscLib.h"#include "stdioLib.h"#include "netLib.h"#include "inetLib.h"#include "sockLib.h"#include "taskLib.h"#include "routeLib.h"#include "wdLib.h"#include "vxLib.h"   #include "inetLib.h"#include "string.h"#include "logLib.h"#include "sysLib.h"#include "ioLib.h"#include "math.h"#include "netinet/ip.h"#include "netinet/in.h"#include "netinet/in_systm.h"#include "netinet/ip_icmp.h"#include "netinet/in_var.h"#ifdef VIRTUAL_STACK#include "netinet/vsLib.h"#include "netinet/vsRdisc.h"#endif /* VIRTUAL_STACK *//* defines */#define INITIAL_DELAY		600#define RDISC_PACKET_SIZE	16/* Defaults for task information */#define RDISC_TASK_PRIORITY 127#define RDISC_TASK_OPTIONS 0#define RDISC_STACK_SIZE 20000/* RFC 1256 values for each interface */struct ifrd    {    char ifName[8];    struct in_addr NetAddress;    struct in_addr AdvertAddress;    int subnet;    int mask;    int AdvertLifetime;    int Advertise;    int PrefLevel;    };    struct rdiscPacket    {    char type;    char code;    short checkSum;    char numAddrs;    char entrySize;    short lifeTime;    unsigned int rAddr;    unsigned int pref;    };/* globals */#ifndef VIRTUAL_STACKIMPORT struct ifnet     *ifnet;         /* list of all network interfaces */IMPORT struct in_ifaddr    *in_ifaddr;SEM_ID rdiscIfSem;#endif  /* VIRTUAL_STACK *//* locals */#ifndef VIRTUAL_STACKLOCAL WDOG_ID wdId;LOCAL int rdiscSock;LOCAL int terminateFlag = 0;LOCAL BOOL debugFlag = 0;LOCAL int rdiscNumInterfaces=0;LOCAL struct ifrd *pIfDisc=0;LOCAL int MaxAdvertInterval;LOCAL int MinAdvertInterval;#endif /* VIRTUAL_STACK *//* forward declarations */#ifdef VIRTUAL_STACKvoid rdiscTimerEvent (int);#endif /* VIRTUAL_STACK */LOCAL void startWdTimer();/******************************************************************************** rdiscLibInit - Initialize router discovery** This routine links the ICMP Router Discovery facility into the VxWorks system.* The arguments are the task's priority, options and stackSize.** Returns: N/A**/void rdiscLibInit    (    int priority, /* Priority of router discovery task. */    int options, /* Options to taskSpawn(1) for router discovery task. */    int stackSize /* Stack size for router discovery task. */    )    {    taskSpawn ("tRdisc", priority, options, stackSize,               (FUNCPTR) rdisc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);    }/********************************************************************************* rdiscInit - initialize the ICMP router discovery function** This routine allocates resources for the router discovery function. Since it* called in the rdisc() routine, it should not be called subsequently ** Returns: OK on successful initialization, ERROR otherwise**/STATUS rdiscInit()    {#ifdef VIRTUAL_STACK    terminateFlag = 0;    debugFlag = 0;    rdiscNumInterfaces=0;    pIfDisc=0;#endif    /* Create Locking semaphore so we can lock our own interface list. */    if ((rdiscIfSem = semBCreate (SEM_Q_PRIORITY, SEM_FULL)) == NULL)        {        logMsg ("rdisc could not create if locking semaphore\n",                0, 0, 0, 0, 0, 0);        return (ERROR);        }              /* create RAW socket */    rdiscSock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);    if (rdiscSock < 0)        {        logMsg("could not get raw socket\n",0,0,0,0,0,0);        semDelete (rdiscIfSem);        return ERROR;        }    pIfDisc = NULL;    if (rdiscIfReset() != OK)        {        close (rdiscSock);        semDelete (rdiscIfSem);        return (ERROR);        }    terminateFlag = 0;    return OK;    }/********************************************************************************* sendAdvert - send an advertisement to one location** This routine sends a router advertisement using the data stored for its'* corresponding interface.  Only the primary network address of the interface* is used as the advertised router address.** Returns: NA**/void sendAdvert    (    int index,    struct in_addr dstAddr    )    {    struct rdiscPacket *pRdis = NULL;    struct sockaddr_in to;    int status;    char sndbuf[RDISC_PACKET_SIZE];    if (debugFlag == TRUE)        logMsg("advertising %s to %s\n",               (int)inet_ntoa((pIfDisc[index].AdvertAddress)), 		(int)inet_ntoa(dstAddr),0,0,0,0);    /* check Advertise enabled flag */    if (pIfDisc[index].Advertise == 0)	return;    bzero (sndbuf, sizeof (sndbuf));    /* form an advertisement packet */    pRdis = (struct rdiscPacket*)sndbuf;    pRdis->type = ICMP_ROUTERADVERT;    pRdis->code = 0;    pRdis->numAddrs = 1;    pRdis->entrySize = 2;    pRdis->lifeTime = htons(pIfDisc[index].AdvertLifetime);    pRdis->rAddr = (pIfDisc[index].NetAddress.s_addr);     pRdis->pref = htonl(pIfDisc[index].PrefLevel);     pRdis->checkSum = 0;    pRdis->checkSum = checksum((u_short *) pRdis, RDISC_PACKET_SIZE);    bzero ((char *)&to, sizeof (to));    to.sin_family = AF_INET;    to.sin_len = sizeof(struct sockaddr_in);    to.sin_addr.s_addr = (dstAddr.s_addr);  /* advertisement destination */     status = sendto(rdiscSock, sndbuf, sizeof(struct rdiscPacket),                    0, (struct sockaddr *)&to, sizeof(to));    if (status != sizeof(struct rdiscPacket))        {        logMsg("rdisc: corrupt packet, errno = %d\n", 		errno,0,0,0,0,0);        }    } /********************************************************************************* sendAdvertAll - send an advertisement to all active locations** This routine sends a router advertisement using the data stored for each* corresponding interface.  Only the primary network address of the interface* is used as the advertised router address.** Returns: NA**/void sendAdvertAll()    {    int i=0;    struct in_addr ia;    /* Make sure the interface list is not being updated. */    semTake (rdiscIfSem, WAIT_FOREVER);    for(i=0; i<rdiscNumInterfaces; i++)	{        if (pIfDisc[i].Advertise == 0)	    continue;         ia.s_addr = pIfDisc[i].NetAddress.s_addr;   	setsockopt(rdiscSock, IPPROTO_IP, IP_MULTICAST_IF, 		   (char *)&ia, sizeof(struct in_addr));	/* multicast to the selected network */         sendAdvert(i, pIfDisc[i].AdvertAddress);        }    semGive (rdiscIfSem);    }/********************************************************************************* rdiscTimerEvent - called after watchdog timeout** This routine is called when a new advertisement is to be sent. ** Returns: NA**/#ifdef VIRTUAL_STACKvoid rdiscTimerEventRestart    (    int stackNum    )    {    netJobAdd ((FUNCPTR)rdiscTimerEvent, stackNum, 0, 0, 0, 0);    }void rdiscTimerEvent    (    int stackNum    )    {    virtualStackNumTaskIdSet(stackNum);#elsevoid rdiscTimerEvent()    {#endif /* VIRTUAL_STACK */    sendAdvertAll();       if (terminateFlag != 0)	return;    startWdTimer();    }/********************************************************************************* rdisc - implement the ICMP router discovery function** This routine is the entry point for the router discovery function.  It* allocates and initializes resources, listens for solicitation messages * on the ALL_ROUTERS (224.0.0.1) multicast address and processes the* messages.** This routine usually runs until explicitly killed by a system operator, but* can also be terminated cleanly (see rdCtl() routine).** Returns: NA**/void rdisc ()    {    int  i;    int status;    char recvBuff[128];    struct sockaddr from;    int FromLen;    struct ip *pIp;    struct rdiscPacket *rdp;    short checkSum;    status = rdiscInit();    if (status == ERROR)        {        logMsg("rdisc: could not initialize router discovery\n", 0,0,0,0,0,0);	return;        }    /* receive buffer IP packet */    pIp = (struct ip * )recvBuff;    /* receive buffer ICMP route discovery packet */    rdp = (struct rdiscPacket *)&recvBuff[20];    /* create WatchDog timer */    wdId = wdCreate();    sendAdvertAll();#ifdef VIRTUAL_STACK    status = wdStart(wdId, INITIAL_DELAY, (FUNCPTR) rdiscTimerEventRestart,                     (int) myStackNum);#else    status = wdStart(wdId, INITIAL_DELAY, netJobAdd, (int)rdiscTimerEvent );#endif /* VIRTUAL_STACK */    if (status == ERROR) 	{	logMsg("rdisc: error starting watchdog timer: %d\n", errno,0,0,0,0,0);        }    while (terminateFlag == 0)	{        if (debugFlag == TRUE)	    logMsg("rdisc: Waiting for solicitation...\n",0,0,0,0,0,0);        status = recvfrom(rdiscSock, recvBuff, 100, 0,			 (struct sockaddr *)&from, &FromLen);        if (status < 0)	    {            logMsg("error in recvfrom returns %d, errno is %d exiting\n", 			status, errno, 0,0,0,0);            rdCtl (NULL, SET_MODE, (void*)MODE_STOP);            return;            }	if (pIp->ip_len < 8)   /* verify IP packet length */	    {            logMsg("rdisc: packet too short, %d bytes\n",                    pIp->ip_len * 4, 0,0,0,0,0);	    continue;	    }	if (rdp->code != 0) /* ICMP code */	    {            logMsg("rdisc: wrong code: %d\n", rdp->code, 0,0,0,0,0);	    continue;	    }        if (rdp->type == 10) /* solicitation message */	    {	    /* NEED to check source address here per RFC */            if (debugFlag == TRUE)		logMsg("rdisc: received solicitation from src addr is %s\n", 		        (int)inet_ntoa(pIp->ip_src), 0,0,0,0,0);    	    /* verify checksum */            checkSum = rdp->checkSum;            rdp->checkSum = 0;    	    if ((u_short)checkSum != (u_short)checksum((u_short *) rdp, 8))		{	        logMsg ("checksum error: %d != %d\n" , (u_short)checkSum , 				(u_short)checksum((u_short *) rdp,8), 0,0,0,0);	        continue;	        }            /* Check the interface list lock. */            semTake (rdiscIfSem, WAIT_FOREVER);	    /* find the matching interface */	    for(i = 0; i < rdiscNumInterfaces; i++)                {		if (pIfDisc[i].subnet == (htonl(pIp->ip_src.s_addr) & 			pIfDisc[i].mask))		   break;		}            /* Check for a match. */            if (i < rdiscNumInterfaces)                sendAdvert(i, pIp->ip_src);            semGive (rdiscIfSem);            }        else            {            if (rdp->type == 9)                {                if (debugFlag == TRUE)                    logMsg("received router advertisement from %s\n",                            (int)inet_ntoa(pIp->ip_src),0,0,0,0,0);                 }            }        }        if (pIfDisc != NULL)        free((char *)pIfDisc);    wdCancel(wdId);    close(rdiscSock);    }/********************************************************************************* restartWdTimer - called at various place when the rdisc timer has to be*    (re-) started** This routine calculates the new interval and starts the rdisc timer.** Returns: NA**/LOCAL void startWdTimer()    {    int interval = MinAdvertInterval+                (rand()%(MaxAdvertInterval-MinAdvertInterval));    interval *= sysClkRateGet();#ifdef VIRTUAL_STACK    wdStart(wdId, interval, (FUNCPTR)rdiscTimerEventRestart, (int) myStackNum);#else    wdStart(wdId, interval, netJobAdd, (int)rdiscTimerEvent);#endif /* VIRTUAL_STACK */    }/********************************************************************************* searchInterface - search interface in local database*

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人video| 亚洲日韩欧美一区二区在线| 精品入口麻豆88视频| 国产欧美日韩中文久久| 亚洲一本大道在线| 日本va欧美va精品发布| 狠狠v欧美v日韩v亚洲ⅴ| 色视频欧美一区二区三区| 91精品国产综合久久久久久漫画 | 有坂深雪av一区二区精品| 蜜臀精品一区二区三区在线观看| 国产成人免费视频网站高清观看视频| 欧洲一区在线电影| 中文字幕中文字幕在线一区 | 国产三级精品三级| 日韩和欧美的一区| 欧美最猛性xxxxx直播| 国产精品免费丝袜| 久久国产视频网| 在线区一区二视频| 亚洲伦理在线精品| 成人黄色电影在线| 久久精品一区二区三区av| 男女男精品视频| 91.麻豆视频| 亚洲理论在线观看| 99久久久久久| 综合欧美亚洲日本| 91视频www| 国产精品电影院| 成人高清视频免费观看| 久久婷婷成人综合色| 国产一区二区三区精品欧美日韩一区二区三区 | 中文字幕免费不卡| 青青国产91久久久久久| 欧美一区二区久久| 麻豆精品精品国产自在97香蕉 | 日韩欧美一级精品久久| 日本色综合中文字幕| 欧美日韩黄视频| 欧美性大战久久久久久久| 色视频成人在线观看免| 91视频在线看| 日韩欧美一级片| 国产精品视频一区二区三区不卡| 精品一区二区三区在线播放视频| 亚洲精品一卡二卡| www.欧美.com| 91久久香蕉国产日韩欧美9色| 中文字幕不卡在线观看| av午夜一区麻豆| 亚洲日本在线视频观看| 欧美亚洲国产怡红院影院| 日日摸夜夜添夜夜添精品视频 | 亚洲一区在线观看免费观看电影高清| 成人av在线播放网站| 亚洲欧洲精品一区二区精品久久久| www.亚洲激情.com| 亚洲影院久久精品| 欧美电视剧免费观看| 成人综合婷婷国产精品久久蜜臀| 日韩美女视频一区二区 | 夜夜嗨av一区二区三区中文字幕 | 国产精品1区2区| 国产精品毛片高清在线完整版| 成人精品国产免费网站| 亚洲最快最全在线视频| 91麻豆精品国产91久久久久久久久 | 亚洲激情中文1区| 欧美日韩国产首页在线观看| 麻豆精品一二三| 亚洲美女一区二区三区| 日韩一区二区三区精品视频 | 色综合久久久久综合| 青青草成人在线观看| 国产精品午夜春色av| 6080午夜不卡| 国产精品一级在线| 亚洲mv在线观看| 亚洲国产精品av| 欧美日韩激情一区二区三区| 成人午夜精品在线| 美女在线视频一区| 亚洲欧美一区二区三区极速播放| 日韩一级黄色大片| 97久久超碰国产精品| 久久电影网站中文字幕| 一区二区三区电影在线播| 久久久久久99久久久精品网站| 91麻豆.com| 久久国产麻豆精品| 国产美女久久久久| 久久久一区二区| 成人免费精品视频| 国产一区二区在线观看免费| 欧美日韩成人综合| 日韩精品一区二区三区三区免费| 午夜视频在线观看一区| 国产视频视频一区| 日韩欧美电影一区| 欧美精品aⅴ在线视频| fc2成人免费人成在线观看播放| 日韩国产成人精品| 亚洲一二三四区不卡| 2021国产精品久久精品| 在线看国产一区| 91免费看`日韩一区二区| 国产在线视频一区二区三区| 日本怡春院一区二区| 婷婷综合在线观看| 亚洲精品日韩专区silk| 精品国产免费一区二区三区香蕉| 成人午夜av电影| 亚洲一区二区在线视频| 免费成人美女在线观看.| 久久99精品网久久| 国产一区在线视频| 国产精品夜夜嗨| 99久久精品国产导航| 韩国视频一区二区| 国内成人精品2018免费看| 国产一区二区在线观看免费| 成人久久18免费网站麻豆| 99re6这里只有精品视频在线观看| 亚洲国产另类av| 亚洲免费av在线| 久久久久国产免费免费| 欧美日韩精品一区二区三区| 91麻豆免费看片| 久久国产福利国产秒拍| 成人爱爱电影网址| 国产盗摄女厕一区二区三区| 国产精品538一区二区在线| 欧美一区二区日韩一区二区| 亚洲123区在线观看| 国产成人自拍网| 欧美伊人久久久久久午夜久久久久| 日本伊人午夜精品| 日韩电影在线观看电影| 亚洲精品中文字幕乱码三区 | 欧美一区二区精品在线| 久久婷婷一区二区三区| 丁香六月综合激情| 国模少妇一区二区三区| 亚洲成人av电影| 精品一区二区免费在线观看| 国产精品中文字幕欧美| 99热精品国产| 在线成人av网站| 久久久久九九视频| 国产精品久久三区| 一区二区三区在线免费| 日本视频一区二区| 91色视频在线| 日韩亚洲欧美在线观看| 久久精子c满五个校花| 亚洲综合免费观看高清在线观看| 亚洲成在人线在线播放| 国产成人日日夜夜| 91亚洲国产成人精品一区二区三| 欧美日韩激情在线| 中文字幕一区在线| 久久不见久久见中文字幕免费| 成人一级视频在线观看| 在线观看日韩毛片| 欧美精品一区二| 一区二区免费看| 国产成人亚洲综合a∨猫咪| 欧美日韩一区二区三区高清| 欧美激情一区在线观看| 日本一道高清亚洲日美韩| 91热门视频在线观看| 精品少妇一区二区三区在线播放| 日韩理论电影院| 国产精品 欧美精品| 欧美精品一二三区| 99精品国产热久久91蜜凸| 精品av综合导航| 日本aⅴ免费视频一区二区三区| 高清在线观看日韩| 久久久久99精品一区| 六月丁香婷婷色狠狠久久| 国产欧美一区二区精品性色超碰| 亚洲观看高清完整版在线观看| 国产精品原创巨作av| 日韩美女一区二区三区四区| 午夜精品久久一牛影视| 99国产欧美另类久久久精品| 精品国产乱码久久| 国产精品69久久久久水密桃| 91精品国产欧美一区二区18 | 青青草成人在线观看| 国产69精品久久久久毛片| 国产精品国产三级国产aⅴ原创| 久久久精品欧美丰满| 毛片一区二区三区| 中文字幕一区三区| 国产一区二区电影| 中国色在线观看另类| 粉嫩av亚洲一区二区图片|