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

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

?? etherlib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
    }/********************************************************************************* etherAddrResolve - find an Ethernet address for a specified Internet address** This routine uses the Address Resolution Protocol (ARP) and internal ARP* cache to resolve the Ethernet address of a machine that owns the Internet* address given in <targetAddr>.** The first argument <pIf> is a pointer to a variable of type `struct ifnet'* which identifies the network interface through which the ARP request messages* are to be sent out.  The routine ifunit() is used to retrieve this pointer* from the system in the following way:* .CS*     struct ifnet *pIf;*     ...*     pIf = ifunit ("ln0");* .CE* If ifunit() returns a non-NULL pointer, it is a valid pointer to* the named network interface device structure of type `struct ifnet'.* In the above example, <pIf> will be pointing to the data structure that* describes the first LANCE network interface device if ifunit() is* successful.** The six-byte Ethernet address is copied to <eHdr>, if the resolution of* <targetAddr> is successful.  <eHdr> must point to a buffer of at least* six bytes.** RETURNS:* OK if the address is resolved successfully, or ERROR if <eHdr> is NULL,* <targetAddr> is invalid, or address resolution is unsuccessful.** SEE ALSO:* etherOutput()*/STATUS etherAddrResolve    (    struct ifnet        *pIf,           /* interface on which to send ARP req */    char                *targetAddr,    /* name or Internet address of target */    char                *eHdr,          /* where to return the Ethernet addr */    int                 numTries,       /* number of times to try ARPing */    int                 numTicks        /* number of ticks between ARPing */    )    {    struct sockaddr_in  sockInetAddr;    unsigned long	addr;    int			retVal = 0;    if (eHdr == NULL)		/* user messed up */        return (ERROR);    /* the 'targetAddr' can either be the hostname or the actual Internet     * address.     */    if ((addr = (unsigned long) hostGetByName (targetAddr)) == ERROR &&	(addr = inet_addr (targetAddr)) == ERROR)	return (ERROR);    sockInetAddr.sin_len = sizeof(struct sockaddr_in);    sockInetAddr.sin_family = AF_INET;    sockInetAddr.sin_addr.s_addr = addr;     /* return 0xffffffffffff for broadcast Internet address */    if (in_broadcast (sockInetAddr.sin_addr, pIf))	{        bcopy ((char *) etherbroadcastaddr, eHdr, sizeof (etherbroadcastaddr));	return (OK);	}    /*      * Try to resolve the Ethernet address by calling arpresolve() which     * may send ARP request messages out onto the Ethernet wire.     */    while ((numTries == -1 || numTries-- > 0) &&	   (retVal = arpresolve ((struct arpcom *) pIf, 				 (struct rtentry *)NULL, 				 (struct mbuf *) NULL,				 (struct sockaddr *)&sockInetAddr,				 (UCHAR *)eHdr))	   == 0)    	taskDelay (numTicks);    if (retVal == 0)		/* unsuccessful resolution */        return (ERROR);    return (OK);    }/********************************************************************************* etherTypeGet - get the type from an ethernet packet** This routine returns a short that is the ethertype (defined in RFC* 1700) from either an 802.3 addressed packet or an RFC 894 packet.* Most packets are encoded as described in RFC 894 but 802.3 addressing* is also recognized.* * RETURNS: A USHORT value that is the ethertype, or 0 on error.** SEE ALSO:* .I "RFC 894, TCP/IP Illustrated,"* Volume 1, by Richard Stevens.*/USHORT etherTypeGet    (    char *pPacket		/* pointer to the beginning of the packet */    )    {    ENET_HDR* pEnetHdr;    struct llc* pLLCHdr;    USHORT ether_type;    /* Try for RFC 894 first as it's the most common. */    pEnetHdr = (ENET_HDR *)pPacket;    ether_type = ntohs(pEnetHdr->type);    /* Deal with 802.3 addressing. */    /* Here is the algorithm. */    /* If the ether_type is less than the MTU then we know that */    /* this is an 802.x address from RFC 1700. */    if (ether_type < ETHERMTU)	{	pLLCHdr = (struct llc *) pPacket;	/* Now it may be IP over 802.x so we check to see if the */	/* destination SAP is IP, if so we snag the ethertype from the */	/* proper place. */	/* Now if it's NOT IP over 802.x then we just used the DSAP as */	/* the ether_type.  */	if (pLLCHdr->llc_dsap == LLC_SNAP_LSAP)	    ether_type = ntohs(pLLCHdr->llc_un.type_snap.ether_type);	else	    ether_type = pLLCHdr->llc_dsap;	}    /* Finally!  Now, who says we should have standards comittees? */    /* Wouldn't it be easier, and cheaper just to shoot these losers? */    return (ether_type);    }/******************************************************************************** etherInputHook - the system etherInputHook** This routine multiplexes packets to multiple input hooks.** RETURNS: TRUE if one of the routines that it called returns TRUE indicating* that the hook routine "ate" the packet, otherwise it returns FALSE.** NOMANUAL**/LOCAL BOOL etherInputHook    (    struct ifnet *pIf,     char *buffer,     int length    )    {    HOOK_ENTRY *pHookEnt;    extern LIST inputHookList;    for (pHookEnt = (HOOK_ENTRY *)lstFirst(&inputHookList);          pHookEnt != NULL; pHookEnt = (HOOK_ENTRY *)lstNext(&pHookEnt->node))	{        if ((* pHookEnt->routine) (pIf, buffer, length))            return (TRUE);	}    return (FALSE);    }/******************************************************************************** etherOutputHook - the system etherOutputHook** This routine is used to multiplex access to output hooks.** RETURNS: TRUE if one of its callee consumed the packet otherwise returns* FALSE.** NOMANUAL*/LOCAL BOOL etherOutputHook    (    struct ifnet *pIf,     char *buffer,     int length    )    {    HOOK_ENTRY* pHookEnt;    extern LIST outputHookList;    for (pHookEnt = (HOOK_ENTRY *)lstFirst(&outputHookList);          pHookEnt != NULL; pHookEnt = (HOOK_ENTRY *)lstNext(&pHookEnt->node))	{        if ((* pHookEnt->routine) (pIf, buffer, length))            return (TRUE);	}    return (FALSE);    }LOCAL BOOL endEtherInputHookRtn    (    void * 	pCookie,    long 	type,    M_BLK_ID 	pMblk, 		/* Received frame (with link-level header). */    LL_HDR_INFO * pLinkHdrInfo,    void * 	pSpare 		/* Extra protocol data. Unused. */    )    {    HOOK_ENTRY * pHookEnt = (HOOK_ENTRY*) pSpare;    char devName[32];    char packetData [ETHERMTU + SIZEOF_ETHERHEADER];    struct ifnet fakeIF;    extern LIST inputHookList;    int flags;    int len;    END_OBJ* pEnd=(END_OBJ*)pCookie;    int ifHdrLen=0;    bzero ( (char *)&fakeIF, sizeof (fakeIF));    fakeIF.if_name = &devName[0];    strcpy (fakeIF.if_name, pEnd->devObject.name);    fakeIF.if_unit = pEnd->devObject.unit;    muxIoctl (pHookEnt->pCookie, EIOCGFLAGS, (caddr_t)&flags);    fakeIF.if_flags = flags;        /* Get the Link Level header length . */    if (muxIoctl (pHookEnt->pCookie, EIOCGHDRLEN, (caddr_t)&ifHdrLen) != OK)        fakeIF.if_hdrlen = 0;    else        fakeIF.if_hdrlen = (UCHAR)ifHdrLen;    len = netMblkToBufCopy(pMblk, (char *)packetData, NULL);    for (pHookEnt = (HOOK_ENTRY *)lstFirst (&inputHookList);          pHookEnt != NULL; pHookEnt = (HOOK_ENTRY *)lstNext (&pHookEnt->node))        {        if ( (* pHookEnt->routine) (&fakeIF, packetData, len))            {            netMblkClChainFree (pMblk);	/* hook has consumed the packet */            return (TRUE);            }        }    return (FALSE);    }/********************************************************************************** nptEtherInputHookRtn- EtherInputHook Receive Routine** This is the receive routine for the etherInputHook while binding to an NPT * device. This is very similar to endEtherInputHook except that it takes a* different arguments.**/LOCAL BOOL nptEtherInputHookRtn    (    void *      pCallBackId,    /* Sent down in muxTkBind(); same as pSpare                                    as in muxBind()                                  */    long        type,           /* SNARF */    M_BLK_ID    pMblk,          /* Received frame (with link-level header). */    void *      pSpareData      /* Extra protocol data */    )    {    HOOK_ENTRY * pHookEnt = (HOOK_ENTRY*) pCallBackId;    char devName[32];    char packetData [ETHERMTU + SIZEOF_ETHERHEADER];    struct ifnet fakeIF;    extern LIST inputHookList;    int flags;    int len;    END_OBJ* pEnd=PCOOKIE_TO_ENDOBJ(pHookEnt->pCookie);    int ifHdrLen=0;    bzero ( (char *)&fakeIF, sizeof (fakeIF));    fakeIF.if_name = &devName[0];    strcpy (fakeIF.if_name, pEnd->devObject.name);    fakeIF.if_unit = pEnd->devObject.unit;    muxIoctl (pHookEnt->pCookie, EIOCGFLAGS, (caddr_t)&flags);    fakeIF.if_flags = flags;    /* Get the Link Level header length . */    if (muxIoctl (pHookEnt->pCookie, EIOCGHDRLEN, (caddr_t)&ifHdrLen) != OK)        fakeIF.if_hdrlen = 0;    else        fakeIF.if_hdrlen = (UCHAR)ifHdrLen;    len = netMblkToBufCopy(pMblk, (char *)packetData, NULL);    for (pHookEnt = (HOOK_ENTRY *)lstFirst (&inputHookList);         pHookEnt != NULL; pHookEnt = (HOOK_ENTRY *)lstNext (&pHookEnt->node))        {        if ( (* pHookEnt->routine) (&fakeIF, packetData, len))            {            netMblkClChainFree (pMblk); /* hook has consumed the packet */            return (TRUE);            }        }    return (FALSE);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品三区| 在线欧美日韩精品| 亚洲男同1069视频| 欧美精品久久一区| 懂色av一区二区三区免费观看| 亚洲欧美乱综合| 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲视频中文字幕| 国内成人精品2018免费看| 综合久久国产九一剧情麻豆| 日韩小视频在线观看专区| 99在线精品免费| 麻豆久久久久久| 一个色妞综合视频在线观看| 久久久美女艺术照精彩视频福利播放| 欧美亚州韩日在线看免费版国语版| 国产一区二区三区电影在线观看 | 老司机免费视频一区二区三区| 亚洲色欲色欲www| 欧美成人精精品一区二区频| 在线日韩av片| 本田岬高潮一区二区三区| 久久99久久精品欧美| 亚洲第一激情av| 亚洲视频狠狠干| 国产精品久久久一区麻豆最新章节| 日韩视频不卡中文| 欧美日韩精品专区| 欧美在线免费观看亚洲| 99vv1com这只有精品| 成人精品在线视频观看| 狠狠色综合播放一区二区| 裸体一区二区三区| 日本欧美一区二区三区| 亚洲成人免费影院| 亚洲一区二区在线观看视频| 中文字幕一区二区三区不卡在线| 国产午夜亚洲精品羞羞网站| 精品噜噜噜噜久久久久久久久试看 | 精品福利视频一区二区三区| 91精品国产一区二区三区蜜臀| 欧日韩精品视频| 欧美色视频在线观看| 欧美性大战久久久| 欧美亚洲精品一区| 欧美无人高清视频在线观看| 欧美亚洲国产一卡| 欧美日韩亚洲综合在线| 欧美日韩视频在线一区二区| 欧美亚洲免费在线一区| 精品视频色一区| 在线不卡一区二区| 欧美一级久久久久久久大片| 日韩三级高清在线| 精品国产123| 久久精品男人天堂av| 中文字幕成人av| 亚洲国产高清aⅴ视频| 国产精品久线观看视频| 亚洲视频一区二区免费在线观看| 亚洲日本va午夜在线电影| 亚洲精品美腿丝袜| 亚洲6080在线| 久久精品国产99国产| 国产精品18久久久久久久网站| 丁香激情综合国产| 色婷婷国产精品综合在线观看| 欧美影院午夜播放| 日韩视频一区在线观看| 亚洲精品在线观看视频| 中文字幕欧美区| 一区二区三区免费在线观看| 日本系列欧美系列| 国产精品888| 在线观看日韩av先锋影音电影院| 欧美二区在线观看| 久久日韩粉嫩一区二区三区| 亚洲欧美在线视频| 视频一区二区三区在线| 国产米奇在线777精品观看| www.66久久| 91麻豆精品国产自产在线 | 国产美女在线观看一区| 波多野结衣一区二区三区 | 国产成人午夜电影网| www.成人在线| 在线成人av影院| 中文字幕欧美国产| 亚洲成av人片www| 国产一区二区不卡老阿姨| 色婷婷香蕉在线一区二区| 日韩一区二区三区在线观看| 中文字幕的久久| 日韩影院免费视频| 成人成人成人在线视频| 欧美日韩大陆在线| 中文字幕av资源一区| 亚洲va韩国va欧美va精品| 国产一区 二区 三区一级| 91国产免费观看| 久久综合久久综合亚洲| 亚洲国产裸拍裸体视频在线观看乱了 | 精品一区二区三区视频在线观看| av不卡一区二区三区| 欧美一级一区二区| 亚洲蜜臀av乱码久久精品| 精品无码三级在线观看视频| 91亚洲精品一区二区乱码| 日韩免费观看高清完整版在线观看| 国产精品短视频| 九九精品视频在线看| 欧美在线观看你懂的| 国产欧美日韩精品一区| 日本人妖一区二区| 欧美亚洲一区二区在线| 国产精品传媒入口麻豆| 六月丁香婷婷久久| 欧美日韩国产综合一区二区三区| 亚洲私人影院在线观看| 国产精品99久久久久久宅男| 欧美一区二区三区成人| 一区二区三区四区视频精品免费 | 激情五月婷婷综合| 7777精品久久久大香线蕉| 亚洲黄色av一区| 成人av在线资源| 2024国产精品视频| 日本亚洲天堂网| 91.成人天堂一区| 亚洲综合偷拍欧美一区色| 成人免费av在线| 国产偷国产偷精品高清尤物| 久久国产生活片100| 国产日韩欧美精品一区| 国产在线播放一区三区四| 欧美一级午夜免费电影| 日本不卡123| 91精品在线一区二区| 亚洲成a人v欧美综合天堂下载| 欧洲精品中文字幕| 亚洲一区国产视频| 欧美图片一区二区三区| 夜夜嗨av一区二区三区四季av| 成人爱爱电影网址| 亚洲色图第一区| 97国产精品videossex| 亚洲视频一区二区免费在线观看 | 日韩视频中午一区| 久久精品av麻豆的观看方式| 精品国产免费人成在线观看| 激情偷乱视频一区二区三区| 精品免费99久久| 国产成人精品免费在线| 国产亚洲成aⅴ人片在线观看| 成人精品视频一区二区三区| 国产精品免费看片| 日本韩国欧美在线| 亚洲二区在线视频| 91精品国产入口| 国产一区二区三区久久久| 国产色产综合色产在线视频| 国产不卡一区视频| 亚洲欧美色图小说| 欧美日韩综合在线免费观看| 日韩电影免费在线| 日韩欧美中文一区| 国产白丝网站精品污在线入口| 亚洲国产精品高清| 在线观看av一区二区| 日韩精品亚洲专区| 欧美变态口味重另类| 国产91在线观看丝袜| 亚洲视频在线观看三级| 91麻豆精品国产综合久久久久久 | 麻豆精品一区二区三区| 久久色在线视频| 北岛玲一区二区三区四区| 亚洲成人av电影在线| 精品国产一区二区三区久久影院| 国产999精品久久| 一区二区免费在线播放| 欧美成人官网二区| 不卡的av电影在线观看| 午夜精品久久久久久久99樱桃| 日韩欧美高清在线| 色综合久久66| 乱一区二区av| 亚洲精品成人悠悠色影视| 欧美一级欧美一级在线播放| 成人一区二区三区| 视频一区二区欧美| 亚洲欧美综合网| 日韩欧美成人一区| 色偷偷一区二区三区| 蜜桃av一区二区| 亚洲女同一区二区| 精品国产一区二区亚洲人成毛片| 色乱码一区二区三区88| 精品系列免费在线观看| 亚洲一区二区免费视频|