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

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

?? ethernet.c

?? ZLG的EASYARM8962開發板中IAR實驗例程第六章
?? C
字號:
#define ETHERNET_GLOBALS
#include "..\User\includes.h"
uint8 My_Ip_1ID[4]=MY_IP_1ID;
uint8 My_Gateway_1ID[4]=MY_GATEWAY_1ID;
uint8 MY_IP_MARK_1ID[4]=IP_MARK_1ID;
uint8 MY_MAC_1ID[6]=My_Mac_1ID;//MAC地址
#if (MAX_NET_PORT>=2)
uint8 My_Ip_2ID[4]=MY_IP_2ID;
uint8 My_Gateway_2ID[4]=MY_GATEWAY_2ID;
uint8 MY_IP_MARK_2ID[4]=IP_MARK_2ID;
uint8 MY_MAC_2ID[6]=My_Mac_2ID;//MAC地址
#endif
/**********************************************************************
**函數原型:unsigned char Send_ethernet_Frame(struct _pkst *TxdData,unsigned char * de_mac,unsigned char PROTOCOL)
**入口參數:*TxdData 	: 發送結構指針
**		   * de_mac     : MAC地址指針
**		NextProtocal 	: 下一層協議,例如IP協議或ARP協議(如:IP_PACKED、ARP_PACKED)
**出口參數:	unsigned char 
**返 回 值:	1
**說    明:	為IP、ARP數據包產生ETHERNET包頭,并發送。
************************************************************************/
uint8 Send_ethernet_Frame	(
					 struct _pkst *TxdData,//結構指針
					 uint8 * de_mac,			//對方的MAC地址指針
					 uint8 PROTOCOL,			//IP協議或ARP協議
					 uint8	num
				 )  
{ //如果沒有MAC地址,就發送一個ARP包。得到MAC地址再發。
ipethernet ethernet_head; //ETHERNET處理緩存區	 
//ipethernet的結構體為DestMacId(目的網卡MAC)  SourceMacId(源網卡MAC) NextProtocal(下層協議)
struct _pkst PKethernet;
	/**************************獲取目的網卡的MAC****************************************/
	ethernet_head.DestMacId[0]=*de_mac;	
	de_mac++;
	ethernet_head.DestMacId[1]=*de_mac;
	de_mac++;
	ethernet_head.DestMacId[2]=*de_mac;
	de_mac++;
	ethernet_head.DestMacId[3]=*de_mac;
	de_mac++;
	ethernet_head.DestMacId[4]=*de_mac;
	de_mac++;
	ethernet_head.DestMacId[5]=*de_mac;
	/************************獲取源網卡的MAC********************************************/
	ethernet_head.SourceMacId[0]=NetPort[num].My_Mac[0];
	ethernet_head.SourceMacId[1]=NetPort[num].My_Mac[1];
	ethernet_head.SourceMacId[2]=NetPort[num].My_Mac[2];
	ethernet_head.SourceMacId[3]=NetPort[num].My_Mac[3];
	ethernet_head.SourceMacId[4]=NetPort[num].My_Mac[4];
	ethernet_head.SourceMacId[5]=NetPort[num].My_Mac[5];
#ifdef Little_End
	if(PROTOCOL==IP_PACKED)//如果是IP包,就設為0X0800
		ethernet_head.NextProtocal=0X0008;
	else if(PROTOCOL==ARP_PACKED)//如果是ARP包,就設為0X0806
		ethernet_head.NextProtocal=0X0608;//0X0806;
#endif
#ifdef Big_End
	if(PROTOCOL==IP_PACKED)//如果是IP包,就設為0X0800
		ethernet_head.NextProtocal=0X0800;
	else if(PROTOCOL==ARP_PACKED)//如果是ARP包,就設為0X0806
		ethernet_head.NextProtocal=0X0806;//0X0806;
#endif
	PKethernet.STPTR=TxdData;//指向前一個結構數組
	PKethernet.length=14;			//ETHERNET報頭的長度
	PKethernet.DAPTR=(uint8 EX_RAM *)&ethernet_head;//ETHERNET報頭的指針
	OS_ENTER_CRITICAL();//保護
	switch(num)
	{
	case 0: 
		Send_Packet(&PKethernet);//發送該幀
		break;
	case 1: 
		break;
	case 2: 
		break;
	default:
		break;
	}
	OS_EXIT_CRITICAL();//恢復
	return(1);
}
/**********************************************************************
**函數原型:    uint8 Send_Ip_To_LLC(struct _pkst *TxdData,unsigned char * de_ip)
**入口參數:?*TxdData	     	: 發送結構指針
**				* de_ip   	     	: IP地址指針
**出口參數:		unsigned char 
**返 回 值:	1					:OK
0					:FAIL
**說    明:	為IP數據包的目標IP查找MAC地址,并發送。
************************************************************************/
uint8 Send_Ip_To_LLC(struct _pkst *TxdData,uint8 * de_ip,uint8 num) 
{
	
	uint8 i;
	//如果該包在
	if((de_ip[0]&NetPort[num].My_Ip_Mark[0])==(NetPort[num].My_Ip[0]&NetPort[num].My_Ip_Mark[0]))
	if((de_ip[1]&NetPort[num].My_Ip_Mark[1])==(NetPort[num].My_Ip[1]&NetPort[num].My_Ip_Mark[1]))
	if((de_ip[2]&NetPort[num].My_Ip_Mark[2])==(NetPort[num].My_Ip[2]&NetPort[num].My_Ip_Mark[2]))
	if((de_ip[3]&NetPort[num].My_Ip_Mark[3])==(NetPort[num].My_Ip[3]&NetPort[num].My_Ip_Mark[3]))
	{
		i=0;//查找一次MAC表。
		do
		{	
			OS_ENTER_CRITICAL();//保護
			if(NetPort[num].ARP_TERM[i].IP_NUM[2]==((IP_NUMBER*)de_ip)->IP[2])
			if(NetPort[num].ARP_TERM[i].IP_NUM[3]==((IP_NUMBER*)de_ip)->IP[3])//如果ARP表的最后兩個數相等而且TTL>0表示,有對應的MAC
			if(NetPort[num].ARP_TERM[i].TTL>0)
			{
				NetPort[num].ARP_TERM[i].TTL=100;//發送
				Send_ethernet_Frame(TxdData,NetPort[num].ARP_TERM[i].MAC_NUM,IP_PACKED,num);
				OS_EXIT_CRITICAL();//保護
				return(1);
			}
			OS_EXIT_CRITICAL();//保護
			i++;
		}
		while(i<MAX_ARP_TERM);//如果arp表查完了還沒有,就退出
		Arp_Request(de_ip,num);//請求對方MAC
		return(0);
	}
	Send_ethernet_Frame(TxdData,Gateway_MAC,IP_PACKED,num);
	return(1);
}

uint8 Rec_Ethernet_Packed(uint8 * RecData,uint8 num)
{
uint8 i;
	
#ifdef Big_End
	if(((ipethernet*)RecData)->NextProtocal==0x0800)//可以減少對數據緩沖取的利用
#endif
#ifdef Little_End
	if(((ipethernet*)RecData)->NextProtocal==0x0008)//可以減少對數據緩沖取的利用
#endif
	{
		RecData=RecData+14;//指向IP包頭
		//檢查是否屬于本IP段,否則不保存到ARP表種小?	
		if((((eip*)RecData)->SourceIp[0]&NetPort[num].My_Ip_Mark[0])==(NetPort[num].My_Ip[0]&NetPort[num].My_Ip_Mark[0]))
		if((((eip*)RecData)->SourceIp[1]&NetPort[num].My_Ip_Mark[1])==(NetPort[num].My_Ip[1]&NetPort[num].My_Ip_Mark[1]))
		if((((eip*)RecData)->SourceIp[2]&NetPort[num].My_Ip_Mark[2])==(NetPort[num].My_Ip[2]&NetPort[num].My_Ip_Mark[2]))
		if((((eip*)RecData)->SourceIp[3]&NetPort[num].My_Ip_Mark[3])==(NetPort[num].My_Ip[3]&NetPort[num].My_Ip_Mark[3]))
		{
			for(i=0;i<MAX_ARP_TERM;i++)
			{//同一網段內最多65535臺節點
				if(NetPort[num].ARP_TERM[i].IP_NUM[2]==((eip*)RecData)->SourceIp[2])
				if(NetPort[num].ARP_TERM[i].IP_NUM[3]==((eip*)RecData)->SourceIp[3])
				if(NetPort[num].ARP_TERM[i].TTL>0)//如果已經保存有對應的MAC地址而且TTL有效
				{//刷新TTL,處理IP包
					NetPort[num].ARP_TERM[i].TTL=100;
					IP_PROCESS(RecData,num);
					return(2);
				}
			}
			//ARP表沒有對應的MAC地址
			for(i=0;i<MAX_ARP_TERM;i++)
			{
				if(NetPort[num].ARP_TERM[i].TTL==0)//如果該ARP表項無效
				{
					NetPort[num].ARP_TERM[i].IP_NUM[0]=((eip*)RecData)->SourceIp[0];
					NetPort[num].ARP_TERM[i].IP_NUM[1]=((eip*)RecData)->SourceIp[1];
					NetPort[num].ARP_TERM[i].IP_NUM[2]=((eip*)RecData)->SourceIp[2];
					NetPort[num].ARP_TERM[i].IP_NUM[3]=((eip*)RecData)->SourceIp[3];
					RecData=RecData-14;
					NetPort[num].ARP_TERM[i].MAC_NUM[0]=((ipethernet*)RecData)->SourceMacId[0];
					NetPort[num].ARP_TERM[i].MAC_NUM[1]=((ipethernet*)RecData)->SourceMacId[1];
					NetPort[num].ARP_TERM[i].MAC_NUM[2]=((ipethernet*)RecData)->SourceMacId[2];
					NetPort[num].ARP_TERM[i].MAC_NUM[3]=((ipethernet*)RecData)->SourceMacId[3];
					NetPort[num].ARP_TERM[i].MAC_NUM[4]=((ipethernet*)RecData)->SourceMacId[4];
					NetPort[num].ARP_TERM[i].MAC_NUM[5]=((ipethernet*)RecData)->SourceMacId[5];
					NetPort[num].ARP_TERM[i].TTL=100;
					RecData=RecData+14;//保存其IP和對應的MAC地址
					IP_PROCESS(RecData,num);
					return(2);
				}
			}
			//MAC表溢出!!
			IP_PROCESS(RecData,num);
			return(4);
		}//if((((eip*)TEMP)->
		//非本地IP
		IP_PROCESS(RecData,num);
		return(3);
	}//if(((ipethernet*)
#ifdef Big_End
	else if(((ipethernet*)RecData)->NextProtocal==0x0806)//可以減少對數據緩沖取的利用
#endif
#ifdef Little_End
	else if(((ipethernet*)RecData)->NextProtocal==0x0608)//可以減少對數據緩沖取的利用
#endif
	{
		RecData=RecData+14;
		PROCESS_ARP_REC(RecData,num);
		return(1);
	}
	return(3);
}
void SetNetPort(void)
{
	uint8 i;
	for(i=0;i<4;i++)
	{
		NetPort[0].My_Ip[i]=My_Ip_1ID[i];
		NetPort[0].My_Gateway[i]=My_Gateway_1ID[i];
		NetPort[0].My_Ip_Mark[i]=MY_IP_MARK_1ID[i];
#if MAX_NET_PORT>=2
		NetPort[1].My_Ip[i]=My_Ip_2ID[i];
		NetPort[1].My_Gateway[i]=My_Gateway_2ID[i];
		NetPort[1].My_Ip_Mark[i]=MY_IP_MARK_2ID[i];
#endif
	}
	for(i=0;i<6;i++)
	{
		NetPort[0].My_Mac[i]=MY_MAC_1ID[i];
#if MAX_NET_PORT>=2
		NetPort[1].My_Mac[i]=MY_MAC_2ID[i];
#endif
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品麻豆网站| 亚洲一二三四在线观看| 国产精品成人在线观看| 视频一区二区三区入口| 国产xxx精品视频大全| 欧美日本在线播放| 国产欧美精品日韩区二区麻豆天美| 一区二区三区在线视频播放| 久久99久久久久| 欧美亚洲综合网| 国产精品福利一区二区| 国产主播一区二区三区| 欧美精品123区| 亚洲精品一二三区| 成人福利在线看| 2023国产精华国产精品| 全国精品久久少妇| 欧美日韩亚州综合| 亚洲综合丝袜美腿| 91视视频在线观看入口直接观看www | 免费成人小视频| 欧洲精品视频在线观看| 亚洲欧洲韩国日本视频| 岛国精品在线播放| 日本一区二区三区国色天香| 国产一区三区三区| 精品久久一区二区| 久久国产精品99久久人人澡| 欧美一区二区视频网站| 午夜影院在线观看欧美| 欧美日韩一本到| 性欧美疯狂xxxxbbbb| 欧美日韩一区 二区 三区 久久精品| 亚洲日本在线观看| 色悠悠亚洲一区二区| 亚洲精品欧美专区| 欧美性xxxxxx少妇| 亚洲高清免费一级二级三级| 欧美日韩一级视频| 日韩电影免费在线| 精品国产凹凸成av人导航| 91精品国产综合久久久久久久久久| 国产女主播视频一区二区| 精品亚洲欧美一区| 久久五月婷婷丁香社区| 韩国欧美国产1区| 国产午夜一区二区三区| 福利一区在线观看| 中文字幕日韩欧美一区二区三区| 99久久99久久精品免费观看| 一区二区三区中文字幕在线观看| 欧美在线免费观看亚洲| 五月天亚洲婷婷| 日韩精品中文字幕在线不卡尤物| 蜜桃传媒麻豆第一区在线观看| 欧美一区2区视频在线观看| 风间由美一区二区三区在线观看 | 亚洲婷婷在线视频| 欧美性感一类影片在线播放| 日韩av一区二区三区四区| 国产美女视频一区| xvideos.蜜桃一区二区| 国产综合久久久久久久久久久久| 精品国产露脸精彩对白| 波多野结衣亚洲| 国产三级精品在线| 日韩中文字幕不卡| 欧美亚洲一区三区| 欧美日韩综合不卡| 欧美日韩一区精品| 久久你懂得1024| 亚洲日本在线观看| 国产精品电影一区二区| 精品88久久久久88久久久| 亚洲乱码国产乱码精品精小说| 欧美日韩中文国产| 国内精品不卡在线| 一区二区三区中文字幕电影| 欧美一区二区三区在线电影| 懂色av一区二区夜夜嗨| 亚洲国产精品久久不卡毛片| 国产亚洲成年网址在线观看| 欧美自拍偷拍午夜视频| 国产精品18久久久久| 亚洲超碰97人人做人人爱| 国产三区在线成人av| 日韩午夜在线影院| 91在线视频播放地址| 精品一区二区在线观看| 亚洲电影你懂得| 最新欧美精品一区二区三区| 欧美va亚洲va香蕉在线| 欧美三级三级三级| 99久久99久久免费精品蜜臀| 久久精品国产亚洲高清剧情介绍| 亚洲一二三四在线观看| 综合久久给合久久狠狠狠97色| 精品久久久影院| 91精品中文字幕一区二区三区| 97久久超碰国产精品| 国产精品99久久久久久似苏梦涵| 日韩av不卡一区二区| 亚洲午夜私人影院| 一区二区三区不卡在线观看| 国产精品毛片大码女人| 国产欧美精品一区二区三区四区| 精品美女被调教视频大全网站| 91精品国产手机| 欧美日韩国产天堂| 欧美日韩精品欧美日韩精品一综合| 91香蕉视频在线| 99re这里只有精品首页| 丁香婷婷综合激情五月色| 精品午夜久久福利影院| 韩国理伦片一区二区三区在线播放| 亚洲成人av中文| 亚洲国产日韩精品| 亚洲午夜在线观看视频在线| 亚洲午夜精品一区二区三区他趣| 亚洲精品国产一区二区三区四区在线| 中文字幕精品一区二区精品绿巨人 | 欧美精品一二三| 欧美日韩高清一区二区| 91精品国产91久久综合桃花| 日韩一区二区三区四区| 欧美www视频| 国产亚洲精品7777| 中文字幕欧美一| 亚洲精品国产精华液| 亚洲va欧美va人人爽| 日本成人中文字幕在线视频| 免费美女久久99| 国产精品12区| 91国偷自产一区二区三区观看| 欧美亚一区二区| 日韩三级.com| 中文av字幕一区| 亚洲一区二区三区四区在线免费观看 | 欧美精品一区二区三区四区| ww久久中文字幕| 国产欧美中文在线| 亚洲伦理在线精品| 日本在线不卡视频| 国产成人av电影在线观看| www.视频一区| 67194成人在线观看| 久久久亚洲国产美女国产盗摄| 国产精品麻豆一区二区| 亚洲成人一区二区| 韩日欧美一区二区三区| 99久久国产综合色|国产精品| 欧美日韩国产区一| 久久影音资源网| 一区二区三区精品视频| 经典三级一区二区| 91黄色免费网站| 精品国产免费一区二区三区香蕉| 国产精品国产a级| 久久精品国产免费看久久精品| 粉嫩aⅴ一区二区三区四区五区| 欧美视频第二页| 国产日韩欧美精品综合| 天天色天天操综合| av不卡在线观看| 精品国产自在久精品国产| 亚洲综合视频在线观看| 国产成人免费在线视频| 欧美剧在线免费观看网站| 国产精品卡一卡二| 美女脱光内衣内裤视频久久网站| av一本久道久久综合久久鬼色| 日韩精品中文字幕在线不卡尤物| 亚洲免费视频成人| 国产一区二区免费在线| 欧美丰满高潮xxxx喷水动漫| 成人欧美一区二区三区视频网页| 日本成人在线看| 欧美色中文字幕| 亚洲色图制服诱惑 | 蜜臀av性久久久久av蜜臀妖精| 99re热视频精品| 欧美国产日韩亚洲一区| 蜜臀91精品一区二区三区| 欧美亚洲动漫制服丝袜| 亚洲日本在线天堂| 成人黄色软件下载| 国产亚洲欧美激情| 久久99精品国产麻豆婷婷| 欧美日韩亚洲国产综合| 亚洲综合自拍偷拍| av色综合久久天堂av综合| 日本一区二区三区久久久久久久久不 | 日韩一区二区三区在线| 亚洲欧美日韩国产中文在线| 成人免费看片app下载| 久久久精品国产99久久精品芒果 | 亚洲激情五月婷婷| eeuss影院一区二区三区| 国产精品网站在线| 成人激情综合网站|