Referencia del Archivo icmp.c

Implementacion del protocolo ICMP.
. Más...

#include "includes.h"

Dependencia gráfica adjunta para icmp.c:


Funciones

void icmp_generate_packet (BYTE *rxtx_buffer)
void icmp_send_request (BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip)
 Envio de un pedido ICMP
.
BYTE icmp_send_reply (BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip)
 Envio de respuesta a un pedido ICMP
.
void ICMP_start (BYTE requester, IP_ADDR strt_ip)
 arranca la maquina de estados de ICMP
void ICMP_restart ()
void ICMP_init (void)
 inicializa banderas de la maquina de estados de ICMP
evita que se ejecute por error (p.e on_process=0)
void ICMP_step (void)
 ejecuta un paso de la maquina de estados de ICMP
void ICMP_error (void)
 lleva a ICMP a un estado de error
lo utilizan los procesos externos para "notificar" de errores (p.e. timeout)

Variables

unsigned char icmp_id = 1
unsigned char icmp_seq = 1

Descripción detallada

Implementacion del protocolo ICMP.
.

The Internet Control Message Protocol (ICMP) is one of the core protocols of the
Internet protocol suite. It is chiefly used by networked computers'
operating systems to send error messages---indicating, for instance,
that a requested service is not available or that a host or router could not be reached.

ICMP differs in purpose from TCP and UDP in that it is usually not used directly
by user network applications. One exception is the ping tool,
which sends ICMP Echo Request messages (and receives Echo Response messages)
to determine whether a host is reachable and how long packets take to get to and from that host.


Documentación de las funciones

void ICMP_error ( void   ) 

lleva a ICMP a un estado de error
lo utilizan los procesos externos para "notificar" de errores (p.e. timeout)

a esta rutina la llama cualquiera que produzca un error sobre ICMP

void icmp_generate_packet ( BYTE rxtx_buffer  ) 

In send ICMP request case, generate new ICMP data.

clear icmp checksum

calculate new checksum. ICMP checksum calculation begin at ICMP type to ICMP data. Before calculate new checksum the checksum field must be zero.

Gráfico de llamadas para esta función:

void ICMP_init ( void   ) 

inicializa banderas de la maquina de estados de ICMP
evita que se ejecute por error (p.e on_process=0)

void ICMP_restart (  ) 

BYTE icmp_send_reply ( BYTE rxtx_buffer,
BYTE dest_mac,
BYTE dest_ip 
)

Envio de respuesta a un pedido ICMP
.

Parámetros:
rxtx_buffer el buffer que se utilizara para generar el paquete.
dest_mac MAC address de destino.
dest_ip IP de destino del paquete

check protocol is icmp or not?

check icmp packet type is echo request or not?

set ethernet header

generate ip header and checksum

generate icmp packet

send packet to ethernet media

Gráfico de llamadas para esta función:

void icmp_send_request ( BYTE rxtx_buffer,
BYTE dest_mac,
BYTE dest_ip 
)

Envio de un pedido ICMP
.

Parámetros:
rxtx_buffer el buffer que se utilizara para generar el paquete.
dest_mac MAC address de destino.
dest_ip IP de destino del paquete

set ethernet header

generate ip header and checksum

generate icmp packet and checksum

send packet to ethernet media

Gráfico de llamadas para esta función:

void ICMP_start ( BYTE  requester,
IP_ADDR  strt_ip 
)

arranca la maquina de estados de ICMP

Parámetros:
requester informacion del proceso que requiere ICMP
strt_ip IP al que se hara el ping

void ICMP_step ( void   ) 

ejecuta un paso de la maquina de estados de ICMP

***** 0-LLAMO A ARP: **********************

llamada a ARP

marco siguiente paso

***** 1-LLEGA RESPUESTA DE ARP: ***********

ademas de enviar request tengo q prender timeout
siempre tengo que chequear que el buffer este
libre antes de mandar algo por lo menos por el momento
(con mas ram no importa)

***** 2-LLEGA ICMP REPLY, FINALIZO: ******

termino el proceso y aviso al requester

***** 3-MANEJO DE ERRORES: ***************

ARP me mando ak, que significa que murio por su timeout
o me mando mi propio timeout
que hacemos???
mato y notifico al requester

Gráfico de llamadas para esta función:


Documentación de las variables

unsigned char icmp_id = 1

unsigned char icmp_seq = 1


Generado el Wed Jul 2 09:20:51 2008 para TCP/IP por  doxygen 1.5.6