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

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

?? ethernet.c

?? 基于S3C2410和SM501的彩屏控制器程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define __ETHERNET
#include "ethernet.h"
#undef __ETHERNET


//********************** Global Variable **********************
volatile uchar *udppack = 0;	// 接收的udp包的IP指針
volatile uchar	PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN];
ushort ourport[10] = {10000,20000,30000,40000,50000,60000,808,300,800,801};

IPaddr_t	NetOurIP;				/* Our IP addr (0 = unknown) */
IPaddr_t	NetOurSubnetMask=0;		/* Our subnet mask (0=unknown) */
IPaddr_t	NetOurGatewayIP=0;		/* Our gateways IP address */
IPaddr_t	NetServerIP;			/* Server IP addr (0 = unknown) */
IPaddr_t	NetArpWaitPacketIP;
IPaddr_t	NetArpWaitReplyIP;

static 	rxhand_f *packetHandler;	/* Current RX packet handler */
int		NetArpWaitTxPacketSize;
uchar	NetOurEther[6];				/* Our ethernet address	*/
uchar	NetServerEther[6];		/* Boot server enet address	*/
volatile uchar * NetRxPkt;		/* Current receive packet */
int		NetRxPktLen;	/* Current rx packet length	*/

uchar 	NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
uchar	NetBcastAddr[6] =	/* Ethernet bcast address */
			{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
uchar	NetEtherNullAddr[6] = { 0, 0, 0, 0, 0, 0 };
int		NetArpWaitTry;
ulong	NetArpWaitTimerStart;
ulong 	NetIPID;		/* IP packet ID	*/
int		NetState;		/* Network loop state */

static thand_f *timeHandler;			/* Current timeout handler */
static ulong	timeStart;				/* Time base value */
static ulong	timeDelta;				/* Current timeout value */
uchar	       *NetArpWaitPacketMAC;	/* MAC address of waiting packet's destination */
uchar          *NetArpWaitTxPacket;		/* THE transmit packet */

//*************************************************************



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 判斷是否16進制字符.
//
// [參數表]
//	s: 待判斷的字符.
//
// 返回: 0-FALSE; 1-TRUE.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
uchar IsXDigital (uchar s)
{
	if(( s >= '0' && s <= '9') ||
	  (s >= 'A' && s <= 'F') ||
	  (s >= 'a' && s <= 'f'))
		return 1;
	else
		return 0;
}//IsXDigital()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 判斷是否十進制字符.
//
// [參數表]
//	s: 待判斷的字符.
//
// 返回: 0-FALSE; 1-TRUE.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
uchar IsDigital (uchar s)
{
	if( s >= '0' && s <= '9' )
		return 1;
	else
		return 0;
}//IsDigital()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 判斷是否字符a~f.
//
// [參數表]
//	s: 待判斷的字符.
//
// 返回: 0-FALSE; 1-TRUE.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 判斷是否是16進制字符中的'a'-'f' **************************
uchar IsLowerStr (uchar s)
{
	if( s >= 'a' && s <= 'f' )
		return 1;
	else
		return 0;
}//IsLowerStr()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 將小寫字符轉換為大寫字符.
//
// [參數表]
//	s: 待轉換的字符.
//
// 返回: 轉換后的字符.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
uchar LowerToUp(uchar s)
{
	return s-32;
}//LowerToUp()



ulong simple_strtoul (const char *cp, char **endp, uint base)
{
	unsigned long result = 0,value;
	
	if (*cp == '0') 
	{
		cp++;
		if ((*cp == 'x') && IsXDigital(cp[1])) 
		{
			base = 16;
			cp++;
		}
		if (!base) 
		{
			base = 8;
		}
	}
	if (!base) 
	{
		base = 10;
	}

	while (IsXDigital(*cp) && (value = IsDigital(*cp) ? *cp-'0' : (IsLowerStr(*cp)
	    ? LowerToUp(*cp) : *cp)-'A'+10) < base) 
	{
		result = result*base + value;
		cp++;

	}
	if (endp)
		*endp = (char *)cp;
	return result;
}//simple_strtoul()



void NetSetHandler(rxhand_f * f)
{
	packetHandler = f;
}//NetSetHandler()



static startAgainTimeout(void)
{
	NetState = NETLOOP_RESTART;
	return NetState;
}//startAgainTimeout()



static IPaddr_t NetReadIP (void *from)
{
	IPaddr_t ip;
	memcpy((void*)&ip, from, sizeof(ip));
	return ip;
}//NetReadIP()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 復制IP.
// 描述: Copy IP.
//
// [參數表]
//	to: 目的地址.
//	from: 源地址.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void NetCopyIP (void *to, void *from)
{
	memcpy(to, from, sizeof(IPaddr_t));
}//NetCopyIP()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 將IP轉換為字符串.
// 描述: Convert an IP address to a string.
//
// [參數表]
//	x: IP.
//	s: 存儲字符串的數組.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void ip_to_string (IPaddr_t x, char *s)
{
 	 x = ntohl(x);
    sprintf (s,"%d.%d.%d.%d",
	(int)((x >> 24) & 0xff),
	(int)((x >> 16) & 0xff),
	(int)((x >>  8) & 0xff),
	(int)((x >>  0) & 0xff)
    );
}//ip_to_string()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 網絡校驗和檢查.
// 描述: 
//
// [參數表]
//	ptr: 數據指針.
//	len: 數據包長度.
//
// 返回: 校驗和結果.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ushort NetCksum (uchar * ptr, int len)
{
	ulong	xsum;

	xsum = 0;
	while (len-- > 0)
		xsum += *((ushort *)ptr)++;
	xsum = (xsum & 0xffff) + (xsum >> 16);
	xsum = (xsum & 0xffff) + (xsum >> 16);

	return (xsum & 0xffff);
}//NetCksum()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 網絡校驗和檢查是否成功.
//
// [參數表]
//	ptr: 數據指針.
//	len: 數據包長度.
//
// 返回: 0-FALSE; 1-TRUE.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int NetCksumOk (uchar * ptr, int len)
{
	return !((NetCksum(ptr, len) + 1) & 0xfffe);
}//NetCksumOk()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 網絡數據包接收.
// 描述:  UDP包接收.
//
// [參數表]
//	udpdata: 數據指針.
//	srcipaddr: 源IP地址.
//	srcport: 源端口號.
//	
// 返回: 數據長度.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ushort NetRxPack (uchar *udpdata, char *srcipaddr,ushort *srcport)
{
	int i;	
	IP_t *ip ;
	Ethernet_t *et;
	IP_t *netarpip;
	ushort udplen;

	NetTRPackInit();	// 分配接收、發送緩沖區
			
	( uchar *) udppack = NULL;
	eth_rx();
	
	if( !udppack )	// 若UDP包的IP地址為0, 則返回
		return 0;
		
	ip = (IP_t *)udppack;

	for( i=0; i<10; i++ )
	{
		// 判定udp端口在不在我的端口范圍
		if( ntohs(ip->udp_dst)==ourport[i] )
			break;
	}
		
	if( i==10 ) 
	{	
		// 判定udp端口不相等
		return 0;
	}

	// 讀出發送端IP地址
	ip_to_string(NetReadIP(&ip->ip_src), srcipaddr);

	// 存貯ip地址和對應的MAC地址
	et = (Ethernet_t *)((ulong)ip-ETHER_HDR_SIZE);
	
	// 保存收包IP地址
	memcpy(((Ethernet_t *)NetArpWaitTxPacket)->et_dest,(char *)et->et_src,6);
	
	netarpip = (IP_t *)(NetArpWaitTxPacket+ETHER_HDR_SIZE);
	NetCopyIP(&netarpip->ip_dst,&ip->ip_src);	   // 保存收包MAC地址

	// 讀出源端口
	*srcport = ntohs(ip->udp_dst);
	
	// 讀出udp數據長度
	udplen = ntohs(ip->udp_len) - 8;
	
	// 讀出udp數據
	memcpy (udpdata,(uchar *)ip + IP_HDR_SIZE, udplen);

	return (udplen);  	
}//NetRxPack()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 設置網絡參數.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void NetSetEther (volatile uchar * xet, uchar * addr, uint prot)
{
	Ethernet_t *et = (Ethernet_t *)xet;

	memcpy (et->et_dest, addr, 6);
	memcpy (et->et_src, NetOurEther, 6);
	et->et_protlen = htons(prot);
}//NetSetEther()


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 設置網絡參數.
//
// [參數表]
//	x: IP.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void print_IPaddr (IPaddr_t x)
{
    char tmp[16];

    ip_to_string(x, tmp);
}//print_IPaddr()



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函數: 網絡接收數據包處理.
//
// [參數表]
//	ptr: 數據指針.
//	len: 數據包長度.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void NetReceiveProcess (volatile uchar * pkt, int len)
{
	Ethernet_t 	*et;
	IP_t 		*ip;
	ARP_t 		*arp;
	IPaddr_t 	tmp;
	int	x;
	
	NetRxPkt = pkt;
	NetRxPktLen = len;
	et = (Ethernet_t *)pkt;
	x = ntohs(et->et_protlen);

	if( x<1514 )
	{
	/*
	 *	Got a 802 packet.  Check the other protocol field.
	 */
		x = ntohs(et->et_prot);
		ip = (IP_t *)(pkt + E802_HDR_SIZE);
		len -= E802_HDR_SIZE;
	}
	else
	{
		ip = (IP_t *)(pkt + ETHER_HDR_SIZE);
		len -= ETHER_HDR_SIZE;
	}

	switch (x)		// 根據協議選擇處理
	{
		case PROT_ARP:
			/*
			 * We have to deal with two types of ARP packets:
			 * - REQUEST packets will be answered by sending  our
			 *   IP address - if we know it.
			 * - REPLY packates are expected only after we asked
			 *   for the TFTP server's or the gateway's ethernet
			 *   address; so if we receive such a packet, we set
			 *   the server ethernet address
			 */

			arp = (ARP_t *)ip;	
				
			if (NetReadIP(&arp->ar_data[16]) != NetOurIP) {
				return;
			}
			if (len < ARP_HDR_SIZE) {
				return;
			}
			if (ntohs(arp->ar_hrd) != ARP_ETHER) {
				return;
			}
			if (ntohs(arp->ar_pro) != PROT_IP) {
				return;
			}
			if (arp->ar_hln != 6) {
				return;
			}
			if (arp->ar_pln != 4) {
				return;
			}

			if (NetOurIP == 0) {
				return;
			}

			switch (ntohs(arp->ar_op)) 
			{
				case ARPOP_REQUEST:		/* reply with our IP address	*/
					NetSetEther((uchar *)et, et->et_src, PROT_ARP);
					arp->ar_op = htons(ARPOP_REPLY);
					memcpy   (&arp->ar_data[10], &arp->ar_data[0], 6);
					NetCopyIP(&arp->ar_data[16], &arp->ar_data[6]);
					memcpy   (&arp->ar_data[ 0], NetOurEther, 6);
					NetCopyIP(&arp->ar_data[ 6], &NetOurIP);
					(void) eth_send((uchar *)et, ((uchar *)arp-pkt) + ARP_HDR_SIZE);
					return;

				case ARPOP_REPLY:		/* arp reply */
					/* are we waiting for a reply */
					if (!NetArpWaitPacketIP || !NetArpWaitPacketMAC)
						break;
					tmp = NetReadIP(&arp->ar_data[6]);

					/* matched waiting packet's address */
					if (tmp == NetArpWaitReplyIP) 
					{
					/* save address for later use */
					memcpy(NetArpWaitPacketMAC, &arp->ar_data[0], 6);

					/* modify header, and transmit it */
					memcpy(((Ethernet_t *)NetArpWaitTxPacket)->et_dest, NetArpWaitPacketMAC, 6);
					(void) eth_send(NetArpWaitTxPacket, NetArpWaitTxPacketSize);
					/* no arp request pending now */
					NetArpWaitPacketIP = 0;
					NetArpWaitTxPacketSize = 0;
					NetArpWaitPacketMAC = NULL;

					}
					return;
				default:
					return;
		}

		case PROT_RARP:

			arp = (ARP_t *)ip;
			if (len < ARP_HDR_SIZE) 
			{
				//printf("bad length %d < %d\n", len, ARP_HDR_SIZE);
				return;
			}

			if ((ntohs(arp->ar_op) != RARPOP_REPLY) ||

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色精品在线视频| 色哟哟国产精品| 色综合天天视频在线观看| 91精品婷婷国产综合久久竹菊| 欧美激情中文字幕一区二区| 日韩一区精品字幕| 99久久99久久精品免费观看| 欧美大片顶级少妇| 亚洲自拍偷拍av| 91在线云播放| 国产欧美一区二区精品性色| 美女网站视频久久| 欧美午夜视频网站| 亚洲三级小视频| 成人h精品动漫一区二区三区| 91精品国产综合久久久久久久 | 欧美一级生活片| 一区二区三区电影在线播| 国产a视频精品免费观看| 欧美电视剧免费观看| 五月婷婷久久丁香| 欧美系列一区二区| 亚洲一卡二卡三卡四卡| 日本精品裸体写真集在线观看| 欧美国产一区视频在线观看| 国产一区二区在线视频| 精品国产乱码久久久久久影片| 婷婷国产在线综合| 7777精品久久久大香线蕉| 亚洲国产日韩一区二区| 欧美在线观看一区| 亚洲国产一区二区三区| 欧美三级电影网| 午夜精品福利视频网站| 久久精品一区四区| 精品一区二区三区免费观看| 精品三级av在线| 国产一区二区视频在线| 2021中文字幕一区亚洲| 国产福利一区二区| 国产精品女人毛片| 一本一本久久a久久精品综合麻豆| 亚洲婷婷在线视频| 欧美性猛交xxxx黑人交 | 国产精品天美传媒沈樵| 成人免费av网站| 国产精品国模大尺度视频| 色欧美片视频在线观看在线视频| 亚洲自拍偷拍麻豆| 日韩视频国产视频| 国产成人综合网| 亚洲欧洲无码一区二区三区| 色94色欧美sute亚洲线路二| 亚洲成年人影院| 精品国产91久久久久久久妲己| 丰满岳乱妇一区二区三区| 亚洲激情一二三区| 欧美一区二区三区在线视频| 国产成人综合在线播放| 亚洲女同一区二区| 欧美一级xxx| 成人av在线一区二区| 亚洲成人一区二区| 久久久www成人免费无遮挡大片| 国产成人a级片| 亚洲大尺度视频在线观看| 精品99999| 在线视频你懂得一区| 久久er99热精品一区二区| 中文字幕亚洲在| 日韩一级片在线播放| 成人激情动漫在线观看| 日韩精品91亚洲二区在线观看| 国产亚洲精品资源在线26u| 欧美无人高清视频在线观看| 国产一区二区三区免费在线观看| 亚洲精品欧美综合四区| 精品剧情在线观看| 欧美四级电影网| 成人午夜激情影院| 久久成人av少妇免费| 洋洋av久久久久久久一区| 久久久久国产精品麻豆ai换脸| 欧美艳星brazzers| 欧美大片在线观看一区二区| 91免费国产在线| 国产高清不卡一区二区| 青青草一区二区三区| 亚洲激情图片小说视频| 国产清纯白嫩初高生在线观看91 | 中文字幕一区二区视频| 日韩区在线观看| 欧美日韩国产一级二级| 色哟哟精品一区| 成人永久免费视频| 国产精品一级二级三级| 日韩国产欧美在线播放| 亚洲一区自拍偷拍| 亚洲欧美一区二区久久| 国产精品天天摸av网| 国产亚洲精品aa午夜观看| 日韩免费看的电影| 日韩精品最新网址| 欧美一级生活片| 日韩欧美高清dvd碟片| 欧美精品日韩精品| 欧美妇女性影城| 欧美日韩精品高清| 欧美猛男男办公室激情| 欧美亚洲动漫精品| 欧美性感一区二区三区| 欧美亚洲动漫制服丝袜| 欧美剧情电影在线观看完整版免费励志电影| 成人理论电影网| 97se亚洲国产综合自在线不卡| 91在线porny国产在线看| 不卡大黄网站免费看| 成人av网站免费| 97精品国产露脸对白| 日本韩国欧美三级| 欧美日韩色综合| 欧美一级日韩一级| 久久久久久久一区| 国产精品福利一区二区三区| 亚洲欧洲av在线| 国产精选一区二区三区| 国产高清精品网站| 91婷婷韩国欧美一区二区| 色婷婷亚洲一区二区三区| 欧美午夜精品理论片a级按摩| 欧美高清hd18日本| 久久久综合视频| 亚洲欧洲美洲综合色网| 亚洲一区二区av在线| 蜜桃av一区二区在线观看| 国产成人免费9x9x人网站视频| av在线一区二区三区| 精品视频一区三区九区| 日韩欧美高清在线| 18涩涩午夜精品.www| 午夜视黄欧洲亚洲| 国产麻豆视频一区二区| 91美女视频网站| 日韩一级高清毛片| 一区在线中文字幕| 秋霞午夜av一区二区三区| 国产精品综合av一区二区国产馆| 99久久婷婷国产| 日韩欧美色电影| 亚洲日本成人在线观看| 午夜视频在线观看一区二区三区| 国产一区二区不卡老阿姨| 色婷婷av一区二区三区大白胸| 日韩精品一区二区三区蜜臀 | 一区二区三区四区不卡在线| 日本午夜一本久久久综合| 成人性视频网站| 91麻豆精品久久久久蜜臀| 国产精品免费av| 奇米精品一区二区三区在线观看 | 精品在线播放午夜| 色欲综合视频天天天| 日韩无一区二区| 亚洲免费观看高清完整版在线观看熊| 蜜芽一区二区三区| 91久久精品网| 亚洲国产精品ⅴa在线观看| 日本aⅴ免费视频一区二区三区| 成人免费视频免费观看| 337p亚洲精品色噜噜噜| 伊人性伊人情综合网| 欧美一区二区观看视频| 日韩一区日韩二区| 国产激情精品久久久第一区二区 | 一本到不卡免费一区二区| 精品国产区一区| 视频一区二区不卡| 在线观看日产精品| 中文字幕日韩一区二区| 国产91精品在线观看| 欧美大片国产精品| 日本欧美一区二区三区乱码| 色婷婷综合久久久久中文| 国产欧美日本一区二区三区| 久久精品国产久精国产| 欧美巨大另类极品videosbest | 欧美日韩在线一区二区| 国产精品久久久久久久久免费樱桃| 麻豆91精品视频| 欧美一区二区三区色| 亚洲综合久久av| 色天使久久综合网天天| 国产精品二三区| jlzzjlzz欧美大全| 亚洲国产精品成人综合色在线婷婷| 精品一区二区在线免费观看| 日韩视频永久免费| 麻豆成人免费电影| 欧美xxxx老人做受| 国产麻豆精品视频|