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

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

?? ip.c

?? 單片機下的TCP/IP協議棧
?? 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 <wzzlin@nankai.edu.cn>
 *
 */

#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久久精品综合麻豆| 自拍偷自拍亚洲精品播放| 国产精品系列在线观看| 国产日韩欧美不卡| 97精品久久久久中文字幕| 最新成人av在线| 欧美性猛交一区二区三区精品| 亚洲成av人片在www色猫咪| 欧美精品 日韩| 激情文学综合插| 亚洲欧洲日产国产综合网| 91福利在线播放| 奇米影视7777精品一区二区| 久久久亚洲国产美女国产盗摄 | 蜜桃一区二区三区四区| 精品少妇一区二区三区视频免付费 | 亚洲资源中文字幕| 欧美女孩性生活视频| 久久精品国产精品青草| 国产日产欧美一区二区视频| 色婷婷av一区二区三区gif| 日韩精品乱码免费| 久久精品在这里| 一本在线高清不卡dvd| 免费成人你懂的| 亚洲视频在线一区| 欧美不卡激情三级在线观看| 色综合久久中文字幕综合网| 久久精品国产精品亚洲精品| 亚洲激情网站免费观看| 欧美精品一区二区三区久久久 | 亚洲成人久久影院| 久久久久综合网| 欧美色男人天堂| 成人精品视频网站| 老司机精品视频导航| 亚洲精品水蜜桃| 久久精品无码一区二区三区 | 日韩欧美一级精品久久| 色综合网站在线| 精品一区二区成人精品| 亚洲精品国产品国语在线app| 精品区一区二区| 欧美三级中文字| 色综合中文综合网| 伊人一区二区三区| 国产亲近乱来精品视频| 91精品黄色片免费大全| 色哟哟在线观看一区二区三区| 极品少妇xxxx偷拍精品少妇| 一区二区久久久久久| 亚洲国产激情av| 精品国产一区久久| 91精品国产欧美日韩| 91久久精品一区二区三区| 国产成人精品影视| 国产一区二区三区四| 日本vs亚洲vs韩国一区三区二区| 亚洲欧美日韩在线不卡| 国产精品久久久久久久岛一牛影视 | 日韩欧美三级在线| 欧美日韩精品免费| 在线精品亚洲一区二区不卡| www.亚洲在线| av不卡在线播放| 国产精品系列在线播放| 精品一二三四区| 蜜桃精品视频在线| 热久久久久久久| 日韩福利视频导航| 日本亚洲三级在线| 日本在线观看不卡视频| 日韩国产精品久久| 免费不卡在线观看| 蜜臀精品一区二区三区在线观看| 性欧美大战久久久久久久久| 亚洲国产精品久久人人爱蜜臀 | 中文字幕一区二区三区四区 | 国内不卡的二区三区中文字幕 | 日本怡春院一区二区| 免费在线一区观看| 久久成人免费网| 国产一区二区伦理片| 国产福利一区二区三区在线视频| 国产成人欧美日韩在线电影| av电影一区二区| 欧洲日韩一区二区三区| 欧美日韩免费在线视频| 这里只有精品99re| 久久久综合视频| 亚洲视频中文字幕| 天天色天天操综合| 激情综合网最新| 成人av手机在线观看| 在线看国产一区| 欧美成人激情免费网| 亚洲国产精品ⅴa在线观看| 亚洲精品高清视频在线观看| 污片在线观看一区二区| 九色综合国产一区二区三区| 成人av网站在线| 欧美疯狂做受xxxx富婆| 精品理论电影在线观看| 国产精品你懂的| 午夜影视日本亚洲欧洲精品| 久久国产夜色精品鲁鲁99| 99精品视频一区| 日韩欧美国产一区在线观看| 国产精品免费人成网站| 婷婷综合久久一区二区三区| 国产精品综合在线视频| 在线视频国内自拍亚洲视频| 精品欧美一区二区久久| 亚洲黄一区二区三区| 六月丁香婷婷色狠狠久久| www.欧美日韩国产在线| 欧美一级国产精品| 成人欧美一区二区三区| 麻豆精品视频在线观看| 91丨porny丨蝌蚪视频| 91精品国产综合久久久久久久久久 | 精品久久一二三区| 亚洲欧洲精品一区二区精品久久久 | 日韩情涩欧美日韩视频| 中文字幕一区二区三中文字幕| 免费成人在线网站| 色94色欧美sute亚洲线路一久| 精品少妇一区二区三区在线视频| 亚洲女人小视频在线观看| 国产乱码精品一区二区三区五月婷 | 日韩电影在线一区| 91丨九色丨黑人外教| 久久久综合激的五月天| 天天免费综合色| 94色蜜桃网一区二区三区| 欧美r级电影在线观看| 亚洲一区在线看| av中文字幕不卡| 国产日韩精品一区二区三区在线| 日韩av一二三| 欧美综合一区二区三区| 欧美高清一级片在线观看| 狠狠色狠狠色综合| 在线成人av影院| 亚洲第一会所有码转帖| 91社区在线播放| 久久亚洲一级片| 美女视频黄 久久| 欧美军同video69gay| 亚洲男人电影天堂| 成人小视频免费观看| 久久免费的精品国产v∧| 琪琪久久久久日韩精品| 欧美电影在哪看比较好| 亚洲大片精品永久免费| 欧美色图一区二区三区| 亚洲精品高清视频在线观看| 97久久精品人人做人人爽 | 欧美日韩国产在线播放网站| 一区二区三区四区不卡在线| 91在线国产福利| 中文字幕综合网| proumb性欧美在线观看| 欧美激情一区三区| av欧美精品.com| 一区二区三区欧美在线观看| 色哟哟在线观看一区二区三区| 亚洲同性gay激情无套| av男人天堂一区| 亚洲综合色在线| 制服丝袜亚洲色图| 捆绑变态av一区二区三区| 日韩三级免费观看| 国产精品69毛片高清亚洲| 欧美高清在线一区| 91丨porny丨在线| 亚洲国产一区二区在线播放| 在线观看一区不卡| 视频一区二区三区在线| 日韩免费观看2025年上映的电影| 精东粉嫩av免费一区二区三区| 精品久久久久av影院 | 97精品久久久久中文字幕| 亚洲精品成人少妇| 欧美人妖巨大在线| 蜜芽一区二区三区| 中文字幕乱码日本亚洲一区二区| 成人动漫av在线| 亚洲韩国一区二区三区| 日韩精品中文字幕在线不卡尤物| 极品销魂美女一区二区三区| 国产精品女同一区二区三区| 欧美三级在线视频| 国产精品1区2区3区在线观看| 日韩美女啊v在线免费观看| 欧美日韩一区二区在线视频| 狠狠色丁香久久婷婷综合_中|