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

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

?? ip.c

?? c8051f的tcpip源程序,新一代功能比較齊全的c8051f020單片機的串行通信c程序,通用的c8051系列tcpip源程序
?? C
字號:
//-----------------------------------------------------------------------------
// Net IP.C
// This module is the IP layer
// Refer to RFC 791, 1122, and RFC 815 (fragmentation)
//-----------------------------------------------------------------------------
#include <string.h>
#include "C8051f.h"
#include "net.h"
#include "cksum.h"
#include "arp.h"
#include "eth.h"
#include "icmp.h"
#include "udp.h"
#include "serial.h"
#include "tcp.h"
#include "ip.h"

extern UCHAR idata debug;
extern ULONG code my_ipaddr;
WAIT xdata wait;


//------------------------------------------------------------------------
// This handles outgoing IP datagrams.  It adds the 20 byte IP header
// and checksum then forwards the IP datagram to the Ethernet layer
// for sending. See "TCP/IP Illustrated, Volume 1" Sect 3.2
//------------------------------------------------------------------------
void ip_send(UCHAR xdata * outbuf, ULONG ipaddr, UCHAR proto_id, UINT len)
{
   IP_HEADER xdata * ip;
   UCHAR xdata * hwaddr;
   static UINT ip_ident = 0;
   
   ip = (IP_HEADER xdata *)(outbuf + 14);
   ip->ver_len = 0x45;          // IPv4 with 20 byte header
   ip->type_of_service = 0;
   ip->total_length = 20 + len;
   ip->identifier = ip_ident++;     // sequential identifier
   ip->fragment_info = 0;           // not fragmented
   ip->time_to_live = 32;           // max hops
   ip->protocol_id = proto_id;      // type of payload
   ip->header_cksum = 0;
   ip->source_ipaddr = my_ipaddr;
   
   // Outgoing IP address
   ip->dest_ipaddr = ipaddr;

   // Compute and insert complement of checksum of ip header
   // Outgoing ip header length is always 20 bytes
   ip->header_cksum = ~cksum(outbuf + 14, 20);
   
   // Use ARP to get hardware address to send this to
   hwaddr = arp_resolve(ip->dest_ipaddr);
	
	// Null means that the ARP resolver did not find the IP address
	// in its cache so had to send an ARP request
	if (hwaddr == NULL)
	{
		// Fill in the destination information so ehrn the ARP response
		// arrives we can identify it and know what to do when we get it
      wait.buf = outbuf;
		wait.ipaddr = ip->dest_ipaddr;
		wait.proto_id = proto_id;
		wait.len = len;
		wait.timer = ARP_TIMEOUT; 
      return;
	}	
	
	eth_send(outbuf, hwaddr, IP_PACKET, 20 + len);
}



//------------------------------------------------------------------------
// This handles incoming IP datagrams from the Ethernet layer
// See "TCP/IP Illustrated, Volume 1" Sect 3.2
//------------------------------------------------------------------------
void ip_rcve(UCHAR xdata * inbuf)
{
	IP_HEADER xdata * ip;
	UINT idata header_len, payload_len;
		
   ip = (IP_HEADER xdata *)(inbuf + 14);
            
   // Make sure it is addressed to my IP address
   if (ip->dest_ipaddr != my_ipaddr) return;

   // Validate checksum of ip header
	header_len = 4 * (0x0F & ip->ver_len);
	payload_len = ip->total_length - header_len;
   if (cksum(inbuf + 14, header_len) != 0xFFFF)
	{
	  	if (debug) serial_send("IP:  Error, cksum bad\r");
	   return; 
   }
	
	// Make sure incoming message is IP version 4
	if ((ip->ver_len >> 4) != 0x04)
	{
		if (debug) serial_send("IP:  Error, not IPv4\r");
   	return;
	}

	// Make sure incoming message is not fragmented because
   // we cannot handle fragmented messages
   if ((ip->fragment_info & 0x3FFF) != 0)
   {
      if (debug) serial_send("IP:  Error, fragmented msg rcvd\r");
	   return; 
   }

   // At this point we have received a valid IP datagram addressed
   // to me.  We do not use header options, and do not forward
   // messages, so in the unlikely event there are header options,
   // delete them and shift the data down. The advantage is that
   // layers such as UDP and TCP know where their data starts
	if (header_len > 20)
	{
		if (debug) serial_send("IP: Rcvd header > 20 bytes\r");
   			
      // Use memmove because of overlap
      memmove(inbuf + 34, inbuf + 14 + header_len, payload_len);

		// Adjust info to reflect the move
		header_len = 20;
		ip->ver_len = 0x45;
		ip->total_length = 20 + payload_len;
	}
	
	
	// Look at protocol ID byte and call the appropriate
   // function to handle the received message.  See 
   // "TCP/IP Illustrated, Volume 1" Sect 1.7 and RFC 791
   // for values for various protocols
   switch (ip->protocol_id)
	{
	   case ICMP_TYPE:
      if (debug) serial_send("IP:  ICMP pkt rcvd\r");
      icmp_rcve(inbuf, payload_len);
		break;

      case IGMP_TYPE:
		// We cannot handle IGMP messages
		if (debug) serial_send("IP:  Error, IGMP pkt rcvd\r");
		break;
		  
		case UDP_TYPE:
		if (debug) serial_send("IP:  UDP pkt rcvd\r");
      udp_rcve(inbuf, payload_len);
		break;

		case TCP_TYPE:   
		if (debug) serial_send("IP:  TCP pkt rcvd\r");
      tcp_rcve(inbuf, payload_len);
		break;

      default:
      if (debug) serial_send("IP:  Unknown IP proto id rcvd\r");
      break;
   }
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品中午字幕| 国内精品久久久久影院一蜜桃| 天堂精品中文字幕在线| 国产精品亚洲一区二区三区在线 | 亚洲国产精品精华液网站| 五月天一区二区| 一本高清dvd不卡在线观看| 久久精品一区二区| 麻豆久久一区二区| 欧美丰满一区二区免费视频| 亚洲欧美日韩久久| 成人综合婷婷国产精品久久 | 国产一区二区三区精品欧美日韩一区二区三区 | 欧美zozozo| 亚洲不卡在线观看| 99视频一区二区三区| 久久久久久亚洲综合影院红桃| 无码av中文一区二区三区桃花岛| 色综合激情久久| 亚洲女与黑人做爰| www.视频一区| 亚洲欧洲性图库| 成人精品国产福利| 国产精品人人做人人爽人人添| 激情文学综合网| 精品久久一区二区| 麻豆精品视频在线观看| 日韩一级片在线观看| 秋霞午夜鲁丝一区二区老狼| 91精品国产福利| 另类欧美日韩国产在线| 精品乱码亚洲一区二区不卡| 捆绑调教美女网站视频一区| 精品剧情v国产在线观看在线| 老司机精品视频导航| 精品国产乱码久久久久久久久| 国产在线视视频有精品| 国产夜色精品一区二区av| 国产ts人妖一区二区| 国产精品视频一二三区| 菠萝蜜视频在线观看一区| 国产精品久久久久久久久免费樱桃| 成人自拍视频在线| 一区二区在线观看视频| 欧美另类高清zo欧美| 九色综合狠狠综合久久| 国产肉丝袜一区二区| 99综合影院在线| 五月婷婷欧美视频| 精品国产乱码久久久久久夜甘婷婷| 国产精品亚洲а∨天堂免在线| 国产精品无码永久免费888| 91视频在线看| 日本不卡在线视频| 欧美精品一区二区三| av成人老司机| 日韩高清不卡在线| 国产亚洲成年网址在线观看| 99精品视频中文字幕| 日韩不卡一区二区三区| 欧美国产一区二区| 欧美日韩精品电影| 国产成人综合在线播放| 亚洲精品免费电影| 欧美zozo另类异族| 91毛片在线观看| 激情亚洲综合在线| 亚洲午夜精品17c| 久久免费看少妇高潮| 在线一区二区观看| 国产精品伊人色| 亚洲www啪成人一区二区麻豆| 国产亚洲精久久久久久| 欧美午夜视频网站| 国产suv精品一区二区三区| 亚洲国产精品人人做人人爽| 久久精品视频免费| 日韩一区和二区| 91九色02白丝porn| 丰满放荡岳乱妇91ww| 午夜精品福利在线| 专区另类欧美日韩| 久久伊人蜜桃av一区二区| 精品视频一区二区三区免费| 丁香啪啪综合成人亚洲小说| 日本免费在线视频不卡一不卡二| 亚洲色图欧美激情| 国产三级精品三级| 日韩精品一区在线观看| 欧美日韩久久久| 99久久久免费精品国产一区二区| 国产一区二区不卡在线| 日韩精品福利网| 亚洲高清一区二区三区| 日韩美女视频一区二区| 国产日韩欧美a| 久久综合九色综合97婷婷女人| 911精品产国品一二三产区| 91豆麻精品91久久久久久| av成人老司机| 91视频国产资源| 成人黄色777网| 成人av网站免费| 成人中文字幕电影| 成人性生交大合| 成人免费黄色大片| 国产盗摄精品一区二区三区在线 | 久久久久久久久久久久久久久99| 337p亚洲精品色噜噜噜| 制服.丝袜.亚洲.中文.综合| 欧美理论片在线| 欧美精品一卡两卡| 91精品国产综合久久精品麻豆| 欧美日韩国产区一| 欧美丰满嫩嫩电影| 日韩欧美色电影| www久久精品| 国产欧美日韩亚州综合| 欧美国产在线观看| 亚洲品质自拍视频| 亚洲综合激情另类小说区| 亚洲综合色噜噜狠狠| 亚洲电影在线免费观看| 午夜欧美电影在线观看| 日韩1区2区日韩1区2区| 免费黄网站欧美| 国产乱码一区二区三区| 成人a级免费电影| 色域天天综合网| 欧美另类z0zxhd电影| 精品少妇一区二区三区日产乱码| 久久综合网色—综合色88| 国产蜜臀97一区二区三区| **欧美大码日韩| 亚洲午夜私人影院| 久久99国产精品久久99果冻传媒| 国产精品一区二区在线观看网站| 99精品欧美一区二区三区小说| 欧美体内she精视频| 日韩欧美中文字幕精品| 亚洲国产精品精华液ab| 亚洲国产精品天堂| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲一区二区免费视频| 免费高清视频精品| 菠萝蜜视频在线观看一区| 欧美日韩一区久久| 26uuu色噜噜精品一区二区| 自拍偷拍亚洲综合| 人妖欧美一区二区| av亚洲精华国产精华| 欧美一区午夜精品| 国产精品久久久久久久久图文区 | 91在线高清观看| 51精品视频一区二区三区| 国产喷白浆一区二区三区| 亚洲一区在线看| 国产剧情一区二区| 欧美精品亚洲二区| 中文字幕免费一区| 看国产成人h片视频| 91视频在线看| 国产亚洲人成网站| 蜜臀久久99精品久久久久久9 | 午夜日韩在线电影| 波多野结衣中文字幕一区| 欧美大片在线观看一区二区| 亚洲综合在线观看视频| 国产精品综合视频| 91精品国产综合久久精品| 一区二区三区欧美| 高潮精品一区videoshd| 日韩一卡二卡三卡| 午夜欧美大尺度福利影院在线看| 成人高清视频在线观看| 亚洲精品一线二线三线无人区| 亚洲国产sm捆绑调教视频 | 亚洲国产色一区| 91日韩在线专区| 国产片一区二区三区| 久久99精品久久久| 欧美久久久一区| 亚洲在线成人精品| 色美美综合视频| 亚洲视频精选在线| 国产精品18久久久久久久网站| 欧美xxxxxxxxx| 日韩av高清在线观看| 欧美日韩美少妇| 首页国产欧美久久| 9191精品国产综合久久久久久| 午夜久久久久久电影| 欧美午夜片在线观看| 亚洲午夜激情网页| 欧美日本在线一区| 男男成人高潮片免费网站| 在线播放欧美女士性生活| 日韩电影一区二区三区| 日韩视频免费观看高清在线视频| 蜜臀久久99精品久久久画质超高清|