Definiciones | |
#define | ICMP_TYPE_ECHOREPLY_V 0 |
#define | ICMP_TYPE_ECHOREQUEST_V 8 |
#define | ICMP_PACKET_LEN 40 |
#define | ICMP_TYPE_P 0x22 |
#define | ICMP_CODE_P 0x23 |
#define | ICMP_CHECKSUM_H_P 0x24 |
#define | ICMP_CHECKSUM_L_P 0x25 |
#define | ICMP_IDENTIFIER_H_P 0x26 |
#define | ICMP_IDENTIFIER_L_P 0x27 |
#define | ICMP_SEQUENCE_H_P 0x28 |
#define | ICMP_SEQUENCE_L_P 0x29 |
#define | ICMP_DATA_P 0x2A |
Funciones | |
void | ICMP_step (void) |
ejecuta un paso de la maquina de estados de ICMP | |
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_start (BYTE requester, IP_ADDR strt_ip) |
arranca la maquina de estados de ICMP | |
BYTE | icmp_send_reply (BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip) |
Envio de respuesta a un pedido ICMP . | |
void | icmp_send_request (BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip) |
Envio de un pedido ICMP . | |
BYTE | icmp_ping (BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip) |
Realiza el ping a un servidor para ver si esta accesible . | |
void | ICMP_error (void) |
lleva a ICMP a un estado de error lo utilizan los procesos externos para "notificar" de errores (p.e. timeout) |
Se definen las posiciones de los campos y algunos valores tipicos.
Se definen funciones para PING, REPLY y REQUEST.
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.
#define ICMP_CHECKSUM_H_P 0x24 |
#define ICMP_CHECKSUM_L_P 0x25 |
#define ICMP_CODE_P 0x23 |
#define ICMP_DATA_P 0x2A |
#define ICMP_IDENTIFIER_H_P 0x26 |
#define ICMP_IDENTIFIER_L_P 0x27 |
#define ICMP_PACKET_LEN 40 |
#define ICMP_SEQUENCE_H_P 0x28 |
#define ICMP_SEQUENCE_L_P 0x29 |
#define ICMP_TYPE_ECHOREPLY_V 0 |
#define ICMP_TYPE_ECHOREQUEST_V 8 |
#define ICMP_TYPE_P 0x22 |
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_init | ( | void | ) |
inicializa banderas de la maquina de estados de ICMP
evita que se ejecute por error (p.e on_process=0)
Realiza el ping a un servidor para ver si esta accesible
.
Utiliza ARP para descubrir la MAC del IP y guarda la MAC en dest_mac.
Envia un request y espera respuesta.
Devuelve true/false si se encuentra o no el servidor.
rxtx_buffer | el buffer que se utilizara para generar el paquete. | |
dest_mac | puntero a MAC address de destino. | |
dest_ip | IP de destino del paquete |
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