?? 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 EthRx();
}
int NetInit(void){
return EthInit();
}
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)-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 + -