⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net.c

📁 这是EBF533试验板的源代码和使用说明手册
💻 C
字号:
#include "net.h"
#include "scc.h"

uchar	clientEther[6]= {0x00,0x5e,0xf6,0x34,0xd8,0x3d};
ulong	clientIP=0x3400a8c0;//DSP IP

uchar	PktBuf[608];

void MemCpy(void *dest, void *src, int cnt){
	char *s1=dest, *s2=src, *endptr=(char *)dest+cnt;
	
	while (s1<endptr)
		*s1++ = *s2++;
	return;
}	// MemCpy.


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

int RxPacket(void){
	//return 1;//
	EthRx();
}


int NetInit(void){
	return EthInit();
}

#define MAX_PACK_LEN 0x200

void RxPacketHandle(char *rxPktBuf, int len){
	ETH_HEADER		*et = (ETH_HEADER *)rxPktBuf;
	IP_HEADER		*ip = (IP_HEADER *)(rxPktBuf+14);
	ARP_HEADER		*arp = (ARP_HEADER *)(rxPktBuf+14);
	ICMP_HEADER	*icmp=(ICMP_HEADER *)(rxPktBuf+34);
	ushort			prot;
	ushort			pklen;
	prot = SWAP16(et->et_protlen);

	switch (prot){
		case 0x806:
			MemCpy(&rxPktBuf[0], (char *)et->et_src, 6);
			MemCpy(&rxPktBuf[6], (char *)clientEther, 6);
			*(short *)(&rxPktBuf[12]) = SWAP16(0x806);
			*(short *)(&rxPktBuf[14]) = SWAP16(1);
			*(short *)(&rxPktBuf[16]) = SWAP16(0x800);
			rxPktBuf[18]              = 0x06;
			rxPktBuf[19]              = 0x04;
			*(short *)(&rxPktBuf[20]) = SWAP16(2);
			MemCpy(&(rxPktBuf[32]), &(rxPktBuf[22]), 6);
			MemCpy(&(rxPktBuf[38]), &(rxPktBuf[28]), 4);
			MemCpy(&(rxPktBuf[22]), clientEther, 6);
			MemCpy(&(rxPktBuf[28]), &(clientIP), 4);
			EthTx(rxPktBuf, 42);
			break;
		case 0x800:
			pklen=SWAP16(ip->ip_len);
 			//printf("Got IP Packet len %d\n",pklen);
 			if ((pklen<=20)||(pklen>MAX_PACK_LEN))
 				return ;
 			pklen-=20;
 			icmp->icmp_op=0;
			icmp->icmp_chksum=0;
			icmp->icmp_chksum=~IPChksum((char *)icmp, pklen/2);
			MemCpy((char *)&(ip->ip_dest), (char *)&(ip->ip_src), 4);
			MemCpy((char *)&(ip->ip_src),(char *)&clientIP,4);
			ip->ip_chksum=0;
			ip->ip_ttl=0x40;
			ip->ip_chksum=~IPChksum((char *)ip, 10);
			MemCpy(&rxPktBuf[0], (char *)et->et_src, 6);
			MemCpy(&rxPktBuf[6], (char *)clientEther, 6);
			TxPacket(rxPktBuf,34+pklen);
			break;
	}
	return;
}	// RxPacketHandle.


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;
}	



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -