📄 net.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 + -