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

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

?? net.c

?? xhyPXA255 Linux Bootloader 源程序
?? C
字號:
/////////////////////////////////////////////////////////////////////////////////
// Copyright(c) 2001-2002 Hybus Co,.ltd. All rights reserved.
//
// Module name:
//      net.c
//
// Description:
//
//
// Author:
//      bedguy
//
// Created:
//      2002.10
//
///////////////////////////////////////////////////////////////////////////////

#include "net.h"
#include "scc.h"
#include "bootp.h"
#include "tftp.h"


uchar	hostEther[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
ulong	hostIP=0;
#ifdef	CLIENT_ETHER
uchar	clientEther[6] = CLIENT_ETHER;
#else
uchar	clientEther[6];
#endif
ulong	clientIP=0;
short	protocol=NOPROTOCOL;
short	ipID;

uchar	PktBuf[MAX_PKT_SIZE];

bool TxPacket(char *txPktBuf, int len){
	return EthTx(txPktBuf, len);
}	// TxPacket.


bool RxPacket(char *rxPktBuf){
	return EthRx(rxPktBuf);
}


bool NetInit(){
	return EthInit();
}


void RxPacketHandle(char *rxPktBuf, int len){
	ETH_HEADER		*et = (ETH_HEADER *)rxPktBuf;
	IP_HEADER		*ip = (IP_HEADER *)(rxPktBuf+ETHER_HDR_SIZE);
	UDP_HEADER		*udp = (UDP_HEADER *)(rxPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE);
	ARP_HEADER		*arp = (ARP_HEADER *)(rxPktBuf+ETHER_HDR_SIZE);
	ushort			prot;

	// get protocol type.
	// IP   : 0x0800.
	// ARP  : 0x0806.
	// RARP : 0x8035.
	prot = SWAP16(et->et_protlen);

	switch (prot){
		case PROT_ARP:
			// error check.
			if (len<ARP_HDR_SIZE) return;
			if (SWAP16(arp->ar_op) != ARPOP_REQUEST) return;
			if (SWAP16(arp->ar_hrd) != ARP_ETHER) return;
			if (SWAP16(arp->ar_pro) != PROT_IP) return;
			if (SWAP16(arp->ar_hln != 6)) return;
			if (SWAP16(arp->ar_pln != 4)) return;
			if (clientIP==0 || MemCmp(&(arp->ar_data[16]), &clientIP, 4)) return;

			// ethernet header.
			MemCpy(&rxPktBuf[0], (char *)et->et_src, 6);
			MemCpy(&rxPktBuf[6], (char *)clientEther, 6);
			*(short *)(&rxPktBuf[12]) = SWAP16(PROT_ARP);
			// ARP packet.
			// hard type.
			*(short *)(&rxPktBuf[14]) = SWAP16(0x0001);
			// prot type.
			*(short *)(&rxPktBuf[16]) = SWAP16(0x0800);
			// hardware address size.
			rxPktBuf[18]              = 0x06;
			// prot size.
			rxPktBuf[19]              = 0x04;
			// op.
			*(short *)(&rxPktBuf[20]) = SWAP16(ARPOP_REPLY);
			// Sender Ethernet Address.
			MemCpy(&(rxPktBuf[32]), &(rxPktBuf[22]), 6);
			// Sender IP Address.
			MemCpy(&(rxPktBuf[38]), &(rxPktBuf[28]), 4);
			// Target Ethernet Address.
			MemCpy(&(rxPktBuf[22]), clientEther, 6);
			// Target IP Address.
			MemCpy(&(rxPktBuf[28]), &(clientIP), 4);
			// ARP packet闌 焊晨.
			EthTx(rxPktBuf, ETHER_HDR_SIZE+ARP_HDR_SIZE);
			break;
		case PROT_IP:
			// error check.
			// length check.
			if (len < ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE) return;	// udp父 葷儈竅骨肺 udp 器竊竅咯 辨撈 check.
			if (len < ETHER_HDR_SIZE+SWAP16(ip->ip_len)) return;
			// 泅犁 ip version籃 4.
			if ((ip->ip_hl_v & 0xf0) != 0x40) return;
			// Can't deal fragments.
			if (ip->ip_off & SWAP16(0x1fff)) return;
			// check checksum.
			if (!IPChksumOK((char *)ip, IP_HDR_SIZE / 2)) return;
			// client狼 ip客 罐籃 packet狼 ip 厚背.
			if (clientIP && MemCmp(&ip->ip_dest, &clientIP, 4)) return;
			// udp牢瘤 check. 17籃 udp狼 鍋齲.
			if (ip->ip_p!=17) return;

			// packet闌 貿府且 薦 樂綽 竊薦甫 齲免.
			switch (protocol){
				case PROT_BOOTP :
					// check udp.
					if (udp->udp_src!=SWAP16(bootps) || udp->udp_dest!=SWAP16(bootpc)) break;
					// bootp 貿府 竊薦 齲免. 棵官弗 Bootp Reply撈擱, Host狼 Ethernet 林家甫 扁廢竊.
					if (BootpRx((char *)(rxPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE),
							SWAP16(udp->udp_len)-UDP_HDR_SIZE)==true){
						MemCpy(hostEther, (char *)et->et_src,6);
					}
					break;
				case PROT_TFTP :
					// ckeck udp.
					if (udp->udp_src!=SWAP16(tftpPort) && (tftpHostPort!=0 && udp->udp_src!=SWAP16(tftpHostPort))) break;
					if (udp->udp_dest!=SWAP16(tftpPort) && udp->udp_dest!=SWAP16(tftpClientPort)) break;
					if (tftpHostPort==0) tftpHostPort=SWAP16(udp->udp_src);
					// tftp 貿府 竊薦 齲免.
					TftpRx((char *)(rxPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE),
							SWAP16(udp->udp_len)-UDP_HDR_SIZE);
					break;
				default :
					break;
			}
			break;
	}
	return;
}	// RxPacketHandle.


int IPChksumOK(char *ptr, int len){
	return !((IPChksum(ptr, len) + 1) & 0xfffe);
}	// IPCksumOk.


unsigned IPChksum(char *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;
}	// IPChksum.


void SetEtherHeader(char *ethHeader, char *hEth, ushort prot){
	volatile ETH_HEADER		*et = (ETH_HEADER *)ethHeader;
	
	MemCpy((char *)et->et_dest, hEth, 6);
	MemCpy((char *)et->et_src, clientEther, 6);
	et->et_protlen = SWAP16(prot);	// set 800 (ip).
	return;
}	// SetEtherHeader.


void SetIPHeader(char *ipHeader, ulong clientIP, ulong hostIP, ushort len){
	volatile IP_HEADER	*ip = (volatile IP_HEADER *)ipHeader;

	// If the data is an odd number of bytes, zero the
	// byte after the last byte so that the checksum will work.
	if (len & 1) ipHeader[IP_HDR_SIZE + len] = 0;

	// Construct an IP header(need to set no fragment bit - XXX).
	ip->ip_hl_v                   = 0x45;						// 泅犁 ip version 4, IP_HDR_SIZE / 4 (not including UDP)
	ip->ip_tos                    = 0;							// type of service. 泅犁 network俊輯 瘤盔救竊. 親惑 0.
	ip->ip_len                    = SWAP16(IP_HDR_SIZE + len);	// total length of ip packet.
	ip->ip_id                     = SWAP16(ipID++);				// identifier.
	ip->ip_off                    = SWAP16(0x0000);				// No fragmentation.
	ip->ip_ttl                    = 64;							// time to live.
	ip->ip_p                      = 17;							// UDP.
	ip->ip_chksum                 = 0;
	MemCpy((char *)&(ip->ip_src), &(clientIP), 4);
	MemCpy((char *)&(ip->ip_dest), &(hostIP), 4);
//	(volatile long)ip->ip_src     = clientIP;	
//	(volatile long)ip->ip_dest    = hostIP;
	ip->ip_chksum = ~IPChksum((char *)ip, IP_HDR_SIZE / 2);
}	// SetIPHeader.


void SetUdpHeader(char *udpHeader, ushort hPort, ushort cPort, ushort len){
	volatile UDP_HEADER		*udp = (UDP_HEADER *)udpHeader;

	udp->udp_dest    = SWAP16(hPort);
	udp->udp_src     = SWAP16(cPort);
	udp->udp_len     = SWAP16(UDP_HDR_SIZE + len);
	udp->udp_chksum  = 0;
	return;
}	// SetUdpHeader.


void PrintIPAddr(long ip){
	ip = SWAP32(ip);
	printf("%d.%d.%d.%d", (char)((ip>>24)&0xff), (char)((ip>>16)&0xff),
					(char)((ip>>8)&0xff), (char)((ip>>0)&0xff));
	return;
}	// NetPrintIPaddr.


void PrintEthAddr(char *ethAddr){
	int		i;

	for (i=0; i<6; i++){
		if (i && i%2==0) printf(" ");
		printf("%02x", ethAddr[i]);
	}
	return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看国产日韩| 国产精品影视天天线| 91福利精品视频| 亚洲黄色在线视频| 欧美三级日韩三级国产三级| 天天综合天天综合色| 欧美乱妇20p| 国产乱码精品一区二区三| 亚洲国产精品传媒在线观看| k8久久久一区二区三区| 夜夜嗨av一区二区三区四季av| 91国产福利在线| 毛片av一区二区| 欧美国产日韩在线观看| 欧美综合视频在线观看| 日韩国产精品91| 国产欧美一区二区精品久导航 | 欧美日韩高清不卡| 免费成人你懂的| 国产精品久久久久久久午夜片| 99re8在线精品视频免费播放| 一区二区三区精密机械公司| 91精品国产福利在线观看| 国产馆精品极品| 亚洲免费在线视频| 日韩免费一区二区| 99国产精品久| 日韩中文字幕不卡| 亚洲国产岛国毛片在线| 欧美日韩精品一区视频| 国产99精品视频| 亚洲一区二区三区美女| 国产亚洲视频系列| 欧美日韩国产精选| 国产白丝精品91爽爽久久| 亚洲mv在线观看| 国产日韩欧美综合一区| 欧美区一区二区三区| 成人avav影音| 美女一区二区久久| 亚洲精品亚洲人成人网在线播放| 日韩一区二区三| 色综合天天综合在线视频| 毛片av一区二区| 亚洲一级在线观看| 中文字幕国产一区二区| 日韩免费视频一区| 欧美在线视频日韩| 成人va在线观看| 国产一区视频在线看| 午夜激情综合网| 亚洲免费观看高清完整版在线观看 | hitomi一区二区三区精品| 婷婷综合另类小说色区| 综合中文字幕亚洲| 久久天天做天天爱综合色| 欧美日韩国产综合久久| 国产精品一区二区你懂的| 日韩精彩视频在线观看| 悠悠色在线精品| 国产精品视频麻豆| 国产丝袜美腿一区二区三区| 日韩一区二区免费视频| 欧美日韩免费观看一区三区| 色偷偷久久一区二区三区| 波多野结衣中文一区| 国产精品一区二区x88av| 美女国产一区二区| 老司机一区二区| 日本成人在线一区| 日韩中文字幕区一区有砖一区 | 国产精品国产三级国产aⅴ入口| 日韩欧美成人激情| 欧美成人a在线| 日韩精品一区二| 精品国产sm最大网站免费看| 91精品国产色综合久久ai换脸 | 欧美成人在线直播| 日韩欧美精品在线视频| 日韩欧美一级二级| 欧美精品一区二区三| 欧美成人vps| 精品久久久久久久久久久久包黑料| 欧美精品乱码久久久久久 | 精品免费国产二区三区| 精品久久久久久久一区二区蜜臀| 精品久久一二三区| 久久久精品免费免费| 中文字幕精品一区二区三区精品| 国产午夜精品美女毛片视频| 国产精品免费av| 亚洲日韩欧美一区二区在线| 亚洲激情男女视频| 视频一区二区中文字幕| 精品一区二区在线免费观看| 国产精品亚洲综合一区在线观看| 国产精品一二三区| 色悠悠亚洲一区二区| 欧美日韩成人综合| 久久亚洲一级片| 亚洲欧洲美洲综合色网| 亚洲一区二区三区美女| 蜜臀国产一区二区三区在线播放 | 香蕉乱码成人久久天堂爱免费| 午夜视频在线观看一区二区三区| 午夜精品福利在线| 国产麻豆欧美日韩一区| 波多野结衣欧美| 欧美日韩国产色站一区二区三区| 日韩欧美一区二区三区在线| 国产精品美女一区二区在线观看| 亚洲免费在线看| 麻豆国产精品一区二区三区| 成人免费观看av| 欧美色中文字幕| 久久久久久久久久久电影| 亚洲美女在线一区| 久色婷婷小香蕉久久| 91在线视频18| 欧美tickling挠脚心丨vk| 最新成人av在线| 蜜臀久久99精品久久久画质超高清| 国产91丝袜在线18| 欧美日韩视频第一区| 中文字幕第一页久久| 午夜精品久久久久久久| 成人综合在线视频| 欧美精品电影在线播放| 国产精品美女久久久久久久| 男女男精品网站| 色综合久久久久久久久久久| 26uuu另类欧美亚洲曰本| 伊人婷婷欧美激情| 国产黑丝在线一区二区三区| 欧美日本精品一区二区三区| 中文字幕五月欧美| 国产在线播放一区| 欧美一级一级性生活免费录像| 亚洲欧洲日产国码二区| 国产激情精品久久久第一区二区 | 成人黄色免费短视频| 欧美xfplay| 午夜精品福利一区二区三区av | 欧美视频你懂的| 国产精品视频观看| 国产麻豆精品theporn| 日韩一级黄色大片| 午夜国产精品影院在线观看| 色成年激情久久综合| 国产精品欧美极品| 国产成人丝袜美腿| 亚洲精品一区在线观看| 久久电影网电视剧免费观看| 欧美日韩一级大片网址| 夜夜嗨av一区二区三区中文字幕 | 欧美美女直播网站| 亚洲观看高清完整版在线观看| 99国产精品久久久久久久久久| 国产亲近乱来精品视频| 国产又黄又大久久| 2023国产一二三区日本精品2022| 免费欧美日韩国产三级电影| 欧美精品久久一区| 日韩电影在线观看一区| 91麻豆精品国产91久久久久久 | 精品免费视频.| 狠狠色丁香久久婷婷综合_中| 91麻豆精品国产91久久久资源速度| 亚洲第一在线综合网站| 欧美精品色一区二区三区| 亚洲高清免费观看高清完整版在线观看| 91麻豆swag| 亚洲美女免费视频| 欧美系列一区二区| 婷婷夜色潮精品综合在线| 91精品黄色片免费大全| 美美哒免费高清在线观看视频一区二区| 欧美日韩不卡一区| 免费成人你懂的| 久久精品夜夜夜夜久久| 丰满岳乱妇一区二区三区| 国产精品久久三| 91国产精品成人| 人人爽香蕉精品| 久久女同互慰一区二区三区| 国产69精品久久久久777| 18成人在线观看| 欧美日韩成人一区| 久久精品久久精品| 国产日韩欧美在线一区| 色综合久久综合中文综合网| 亚洲一区中文日韩| 91精品国产综合久久久久| 国产美女精品一区二区三区| 久久久激情视频| 色哟哟一区二区在线观看| 日本成人在线不卡视频| 亚洲国产精品二十页| 欧美体内she精高潮| 国产曰批免费观看久久久|