Stefan Schuermans
initial commit of files from bluebox project
Stefan Schuermans commited fd252ce at 2015-12-19 20:16:38
/* BlueDataDistributor - data distribution module from ethernet to 32 serial ports
* version 0.1.1 date 2006-10-07
* Copyright (C) 2006 Stefan Schuermans <stefan@blinkenarea.org>
* a BlinkenArea project - http://www.blinkenarea.org/
*/
#include <string.h>
#include "checksum.h"
#include "ethernet.h"
#include "icmp.h"
#include "ip.h"
#include "macros.h"
#include "nethelp.h"
// send an ICMP packet
// pData must point to a struct IcmpPacket with IcmpHdr.Type, IcmpHdr.Code and IpHdr.Dest already initialized
static void IcmpSend( unsigned char * pData, unsigned short Length )
{
struct IcmpPacket * pIcmpPack;
unsigned int chk;
// packet too short
if( Length < sizeof( struct IcmpPacket ) )
return;
// convert pointer to ICMP packet
// (this saves us from always casting pData)
pIcmpPack = (struct IcmpPacket *)pData;
// fill in header values
pIcmpPack->IcmpHdr.Chk = 0x0000;
// generate checksum
chk = Checksum( (unsigned char *)&pIcmpPack->IcmpHdr, Length - sizeof( struct EthernetHeader ) - sizeof( struct IpHeader ), 0x0000, 0x0000 );
pIcmpPack->IcmpHdr.Chk = htons( chk );
// send ICMP packet
pIcmpPack->IpHdr.Proto = 0x01; // ICMP
IpSend( pData, Length );
}
// process a received ICMP echo request packet
static void IcmpEchoReqRecv( unsigned char * pData, unsigned short Length )
{
struct IcmpEchoPacket * pIcmpEchoPack;
// packet too short
if( Length < sizeof( struct IcmpEchoPacket ) )
return;
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX