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

📄 icmp.c

📁 MC9S12NE64串口与网络通信源代码
💻 C
字号:
 /*****************************************************************************
 *
 * File Name     : icmp.c
 *
 * DESCRIPTION   : Used for ICMP Protocol  
 *
 * Written by TomXue  @2003 
 * Modified by houlei @2004.10.10
 *****************************************************************************/


#include "ne64api.h"
#include "ethernet.h"
#include "etherinit.h"
#include "IO_MAP.h"
#include "MOTTYPES.h"

extern tU16 checksum(tU16 *, tU16);
extern void icmp_echo(in_Header *, tU16);
extern tU08 *sed_FormatPacket( tU08 *, tU08 *, tU16 );
extern tU08 sed_Send( tU16 );
extern void Move( tU08 *, tU08 *, tU16 );
extern tU08 *EtherPtr;

void icmp_in(in_Header *ip_icmp,tU16 ip_len)        //used to process a icmp packet
{
	tU16 old_icmp_checksum=((icmphdr *)(ip_icmp+1))->icmp_checksum;
	tU16 icmp_len = ip_len - 0x0014;                // 0x0014 is length of ip packet head
	((icmphdr *)(ip_icmp+1))->icmp_checksum = 0x0000;
	if( checksum((tU16 *)((icmphdr *)(ip_icmp+1)), icmp_len)==old_icmp_checksum ){
	    switch( ((icmphdr *)(ip_icmp+1))->icmp_type ){
	    case ICMP_ECHO :
		    icmp_echo(ip_icmp,icmp_len);
		    break;
	    default:
	        break;
	  }
	}
}

void icmp_echo(in_Header *ip,tU16 icmp_len) {
	struct _pkt {
		in_Header in;
		icmphdr icmp;
	} *pkt;
	in_HwAddress addrtemp;
	icmphdr *icmpptr = ((icmphdr *)(ip+1));
	pkt = (struct _pkt *)sed_FormatPacket( EtherPtr,(((tU08 *)ip)-8),0x0800);
	addrtemp = pkt->in.destination;
	pkt->in.destination = ip->source;
	pkt->in.source = addrtemp;
	icmpptr->icmp_type = 0x00;
	pkt->icmp.icmp_checksum = checksum((tU16 *)icmpptr, icmp_len);
	pkt->icmp.icmp_type = 0x00;
	sed_Send(sizeof(in_Header)+icmp_len);

}




⌨️ 快捷键说明

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