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

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

?? ip.c

?? 本程序實現單片機控制以太網網卡進行傳輸數據
?? C
字號:
/*
 * Copyright (c) 2003 Electric Application Laboratory of NAN KAI University
 * All rights reserved.
 *
 * 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. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
 *
 * Author: Li Zhanglin <http://www.zlmcu.com>
 *
 */

#include "..\GloblDef\GloblDef.h"
#include "..\TCPIP\TCPIPmem.h"
#include "..\TCPIP\IP.h"
#include "..\TCPIP\icmp.h"
#include "..\TCPIP\Netif.h"
#include "..\TCPIP\TCP.h"

/* Check sum calulation. data in buff, size, InSum is initial sum */
WORD CheckSum(WORD DT_XDATA * buff,WORD size,DWORD InSum) REENTRANT_SIG
{
	/* TO DO:in packet memory high part of short is in low memory. add all data in 
	form of 16 bits get a result of 32 bits, add high 16 bits to low 16 bits two 
	times.  get a 16 bits result then complement it. */

	DWORD cksum = InSum; 

	/* sum all word except the last odd byte(if size is a odd num) */
	WORD DT_XDATA * EndBuf = buff + size/2;
	while(buff < EndBuf)
	{ 
		/* net order is equeal as host order in mirochip, so no need to change */
		cksum += *(buff++); 
	} 
	
	/**((WORD xdata *)CheckSumInParam) = size;
	*((WORD xdata *)(CheckSumInParam+2)) = buff;
	asmAddCheckSum();
	cksum = CheckSumOutParm;
	*/
	
	/* if has last odd byte. use this byte as the high part of 16 bits, and add. */
	if((size & 0x0001) != 0) 
		cksum += (*buff) & 0xff00;

	cksum = (cksum >> 16) + (cksum & 0xffff); 
	cksum += (cksum >>16); 
	return (WORD)(~cksum); 
}

/* IP input process */
void IPInput(struct SMemHead DT_XDATA *MemHead) REENTRANT_MUL
{
	struct SIPHead DT_XDATA *pIPHead;
	struct SNetIf  DT_XDATA *pNetIf;		/* for search netif list */

	pIPHead = (struct SIPHead DT_XDATA *)(MemHead->pStart);

	/* check ip version */
	if(IP_VERSION(pIPHead) != IP_VERSION_4)
	{
		MemFree(MemHead);
		return;
	}

	/* if checksum is ok */
	if(CheckSum((WORD DT_XDATA *)pIPHead,(WORD)IP_HEAD_LEN(pIPHead),0) != 0)
	{
		MemFree(MemHead);
		return;
	}

	/* ip packet with options is not supported */
	if(IP_HEAD_LEN(pIPHead) != IP_HEAD_MIN_LEN)
	{
		MemFree(MemHead);
		return;
	}

	/* ip packet fragmented is not supported */
	if((pIPHead->FragmentFlag_Offset & IP_FRAGMENT_OFFSET_MASK)!= 0)
	{
		MemFree(MemHead);
		return;
	}

	
	/* if this packet for us. check all the netif. if a host
	has tow device(tow ip). This packet may come from one device
	but send for the IP of the other deviec. In this case we should
	not drop or forward this packet */
	
	/* if this packet is not for us. forward it */
	if((pNetIf = NetIfFindIP(pIPHead->IPDest)) == NULL)
	{
		#ifdef IP_ENABLE_FORWARD	/* if act as a router */
		/* We should decrease the IPHead->ttl */
		if(pIPHead->LifeLength != 0)
		{
			pIPHead->LifeLength--;
				
			/* recaculate IP head checksum. there is a easy method
			to recaculate, leave for later version improvment */
			CheckSum((WORD DT_XDATA *)pIPHead,(WORD)IP_HEAD_LEN(pIPHead),0);

			/* find a rout( a interface ) */
			if((pNetIf = NetIfFindRout(pIPHead->IPDest)) != NULL)
			{
				/* forward. send it through this interface. if return FALSE, we
				do not care, the soure of the packet will deel with it. */
				pNetIf->output(MemHead,pNetIf,pIPHead->IPDest);
			}
		}
		#endif
		
		MemFree(MemHead);
		return;
	}
	else
	{
		/* MemHead->pStart set to point uper layer */
		MemHead->pStart += sizeof(struct SIPHead);

		/* pass to the uper layer */
		switch(pIPHead->Protocol)
		{
		case IP_PROTOCOL_TCP:
			TCPInput(MemHead);
			break;
#if	ICMP_EN
		case IP_PROTOCOL_ICMP:
			ICMPInput(MemHead);
			break;
#endif
		default:
			MemFree(MemHead);
		}
	}
}

/* out put a ip packet,NOTE:MemHead->pStart point to IPHead.
IPScr IPDest Protocol TotalLen is already filled at uper layer.
To do so TCPCheckSum is easy to generate and pass augument to 
IPOutput is easyer. 
return :
	TURE: send the packt successful. */
BOOL IPOutput(struct SMemHead DT_XDATA * MemHead) REENTRANT_SIG
{
	struct SNetIf  DT_XDATA *pNetIf;
	struct SIPHead DT_XDATA *pIPHead;
	WORD tCheckSum;
	
	pIPHead = (struct SIPHead DT_XDATA *)(MemHead->pStart);

	/* found a rout */
	if((pNetIf = NetIfFindRout(pIPHead->IPDest)) != NULL)
	{
		/* fill IP head */
		pIPHead->CheckSum				= 0;
		pIPHead->FragmentFlag_Offset	= 0;
		pIPHead->FragmentID				= 0;
		pIPHead->LifeLength				= IP_INITIAL_LIFE;
		pIPHead->ServeType				= 0;
		pIPHead->Ver_HeadLen			= (IP_VERSION_4 << 4) + IP_HEAD_MIN_LEN/4;

		/* checksum */
		tCheckSum = CheckSum((WORD DT_XDATA *)pIPHead,(WORD)IP_HEAD_LEN(pIPHead),0);
		pIPHead->CheckSum = htons(tCheckSum);

		/* output it */
		return pNetIf->output(MemHead,pNetIf,pIPHead->IPDest);
	}
	else
		return FALSE;
	/* 'MemHead' freeing is at tcp model when it is acked */
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷亚洲综合| 一本大道久久a久久精品综合| 国产精品亚洲专一区二区三区| 成年人国产精品| 欧美一区二区三区视频在线| 久久精品免视看| 亚洲一本大道在线| 成人一区在线观看| 日韩欧美久久一区| 亚洲综合在线观看视频| 国产一区二区视频在线| 欧美日韩美女一区二区| 国产精品国产三级国产专播品爱网 | 一区二区三区在线视频播放| 捆绑变态av一区二区三区| 欧美中文字幕久久| 18涩涩午夜精品.www| 国产一区二区免费在线| 91精品国产麻豆国产自产在线| 亚洲欧美日韩久久| 成人午夜免费视频| 久久久www成人免费毛片麻豆| 日韩一区欧美二区| 欧美美女bb生活片| 亚洲aⅴ怡春院| 欧美在线一二三四区| 亚洲日本va在线观看| 成人高清免费观看| 欧美电视剧在线看免费| 美女www一区二区| 欧美精品123区| 日韩中文字幕麻豆| 制服丝袜中文字幕亚洲| 亚洲成人中文在线| 欧美人动与zoxxxx乱| 亚洲一区中文在线| 在线观看精品一区| 亚洲午夜电影网| 欧美蜜桃一区二区三区| 午夜精品影院在线观看| 在线成人av网站| 麻豆精品久久精品色综合| 欧美一区二区国产| 亚洲国产精品久久人人爱蜜臀 | 日本vs亚洲vs韩国一区三区| 欧美午夜精品一区| 亚洲午夜精品网| 91 com成人网| 久久成人久久爱| 久久亚洲一区二区三区明星换脸 | 国产成人免费高清| 国产亚洲精品7777| 99精品热视频| 亚洲精品视频在线观看免费| 欧美综合欧美视频| 蜜桃av一区二区| 国产日韩亚洲欧美综合| 福利91精品一区二区三区| 中文字幕第一区第二区| 91农村精品一区二区在线| 亚洲小少妇裸体bbw| 欧美一区二区三区日韩视频| 国产乱码字幕精品高清av| 国产精品成人免费精品自在线观看| 色av综合在线| 免费观看在线色综合| 欧美经典三级视频一区二区三区| 91在线视频免费91| 裸体歌舞表演一区二区| 欧美国产97人人爽人人喊| 在线看日韩精品电影| 久久精品国产99国产精品| 亚洲欧美在线视频| 日韩精品一区二| 91麻豆蜜桃一区二区三区| 日韩专区中文字幕一区二区| 久久精品日韩一区二区三区| 色婷婷综合久久久久中文一区二区 | 麻豆精品视频在线观看免费| 国产精品乱人伦一区二区| 欧美日韩精品三区| 成人黄色电影在线| 日本不卡一二三区黄网| 亚洲欧美综合另类在线卡通| 日韩三级免费观看| 在线精品视频免费观看| 国产成人综合在线观看| 日一区二区三区| 亚洲私人黄色宅男| 久久久不卡网国产精品二区| 正在播放一区二区| 一本一本久久a久久精品综合麻豆| 久久精品国产一区二区三区免费看| 久久精品视频在线看| 日韩一区二区电影网| 在线观看视频一区二区 | 久久久久久免费网| 这里只有精品视频在线观看| 91在线精品秘密一区二区| 久久精品久久久精品美女| 亚洲一区二区在线观看视频| 国产精品麻豆网站| 久久久久久久久一| 精品国免费一区二区三区| 538prom精品视频线放| 欧美影院一区二区| 色中色一区二区| jizzjizzjizz欧美| 国产成人av电影在线观看| 人妖欧美一区二区| 首页综合国产亚洲丝袜| 亚洲午夜激情网页| 亚洲高清在线视频| 亚洲资源在线观看| 亚洲人午夜精品天堂一二香蕉| 国产欧美综合在线观看第十页| 欧美mv日韩mv亚洲| 欧美成人在线直播| 日韩精品最新网址| 精品国精品自拍自在线| 久久综合九色综合欧美98| 欧美刺激午夜性久久久久久久| 51精品国自产在线| 91精品国产高清一区二区三区蜜臀 | 91视频国产资源| 色综合久久久久综合体| 色综合亚洲欧洲| 欧洲一区在线观看| 欧美疯狂做受xxxx富婆| 欧美一区2区视频在线观看| 欧美一激情一区二区三区| 日韩一区二区电影在线| 久久久久国产精品麻豆| 国产人成亚洲第一网站在线播放| 国产欧美一区二区精品忘忧草| 中文字幕高清不卡| 亚洲自拍另类综合| 视频在线在亚洲| 狠狠色伊人亚洲综合成人| 国产**成人网毛片九色| 91麻豆精品秘密| 在线不卡欧美精品一区二区三区| 欧美一区二区日韩一区二区| 精品1区2区在线观看| 国产精品热久久久久夜色精品三区 | 久久这里只有精品6| 国产精品久久久久三级| 一区二区在线观看av| 日韩精品电影一区亚洲| 国产黄色精品视频| 欧美在线视频不卡| 日韩免费成人网| 一色桃子久久精品亚洲| 午夜欧美在线一二页| 国产一区二区在线观看免费| 色综合天天狠狠| 日韩免费高清电影| 亚洲最色的网站| 国内国产精品久久| 在线精品视频小说1| 久久精品亚洲乱码伦伦中文| 一区二区三区丝袜| 国产美女在线观看一区| 欧美伊人久久久久久午夜久久久久| 日韩精品一区二区三区在线| 亚洲日本免费电影| 国产在线精品一区二区| 欧美色国产精品| 国产精品免费视频观看| 麻豆中文一区二区| 欧美午夜影院一区| 日韩美女久久久| 国产乱子轮精品视频| 欧美二区三区的天堂| 亚洲视频你懂的| 狠狠久久亚洲欧美| 欧美日韩一本到| 中文字幕字幕中文在线中不卡视频| 日韩和欧美的一区| 在线观看日韩毛片| 中文字幕五月欧美| 成人动漫视频在线| 久久久久久久久一| 精品在线免费观看| 欧美一级搡bbbb搡bbbb| 亚洲精品免费在线| 99精品在线免费| 国产精品入口麻豆原神| 成人午夜免费电影| 欧美激情一区二区三区不卡| 精品综合久久久久久8888| 欧美一区二区三区人| 亚洲成人av在线电影| 欧美三区在线视频| 亚洲一区二区三区四区五区黄| 99精品一区二区三区| 国产精品私人影院| 成人动漫一区二区三区| 中文字幕中文字幕在线一区 | 丝袜诱惑制服诱惑色一区在线观看|