#include "includes.h"
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 |
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.
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.
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 | ( | ) |
Envio de respuesta a un pedido ICMP
.
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
Envio de un pedido ICMP
.
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
arranca la maquina de estados de ICMP
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
unsigned char icmp_id = 1 |
unsigned char icmp_seq = 1 |