Definiciones | |
#define | ARP_PACKET_LEN 28 |
#define | ARP_OPCODE_REQUEST_V 0x0001 |
#define | ARP_OPCODE_REQUEST_H_V 0x00 |
#define | ARP_OPCODE_REQUEST_L_V 0x01 |
#define | ARP_OPCODE_REPLY_V 0x0002 |
#define | ARP_OPCODE_REPLY_H_V 0x00 |
#define | ARP_OPCODE_REPLY_L_V 0x02 |
#define | ARP_HARDWARE_TYPE_H_V 0x00 |
#define | ARP_HARDWARE_TYPE_L_V 0x01 |
#define | ARP_PROTOCOL_H_V 0x08 |
#define | ARP_PROTOCOL_L_V 0x00 |
#define | ARP_HARDWARE_SIZE_V 0x06 |
#define | ARP_PROTOCOL_SIZE_V 0x04 |
#define | ARP_HARDWARE_TYPE_H_P 0x0E |
#define | ARP_HARDWARE_TYPE_L_P 0x0F |
#define | ARP_PROTOCOL_H_P 0x10 |
#define | ARP_PROTOCOL_L_P 0x11 |
#define | ARP_HARDWARE_SIZE_P 0x12 |
#define | ARP_PROTOCOL_SIZE_P 0x13 |
#define | ARP_OPCODE_H_P 0x14 |
#define | ARP_OPCODE_L_P 0x15 |
#define | ARP_SRC_MAC_P 0x16 |
#define | ARP_SRC_IP_P 0x1C |
#define | ARP_DST_MAC_P 0x20 |
#define | ARP_DST_IP_P 0x26 |
Funciones | |
void | arp_generate_packet (BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip) |
Genera un paquete ARP para un determinado IP y MAC. | |
void | arp_send_request (BYTE *rxtx_buffer, BYTE *dest_ip) |
Envia un paquete ARP Who_is preguntando por una IP. | |
void | arp_send_reply (BYTE *rxtx_buffer) |
BYTE | arp_who_is (BYTE *rxtx_buffer, BYTE *dest_mac, BYTE *dest_ip) |
averigua la MAC correspondiente a un IP | |
void | ARP_step (void) |
ejecuta un paso de la maquina de estados de ARP | |
void | ARP_init (void) |
inicializa banderas de la maquina de estados de ARP evita que se ejecute por error (p.e on_process=0) | |
void | ARP_start (IP_ADDR strt_ip) |
arranca la maquina de estados de ARP | |
void | ARP_error (void) |
lleva a ARP a un estado de error lo utilizan los procesos externos para "notificar" de errores (p.e. timeout) |
Se definen los offsets de los campos de ARP y los valores de constantes para dichos campos.
Address Resolution Protocol (ARP) is the method for finding a host's hardware address when only its network layer address is known. Due to the overwhelming prevalence of IPv4 and Ethernet, ARP is primarily used to translate IP addresses to Ethernet MAC addresses. It is also used for IP over other LAN technologies, such as Token Ring, FDDI, or IEEE 802.11, and for IP over ATM.
ARP is used in four cases of two hosts communicating:
#define ARP_DST_IP_P 0x26 |
#define ARP_DST_MAC_P 0x20 |
#define ARP_HARDWARE_SIZE_P 0x12 |
#define ARP_HARDWARE_SIZE_V 0x06 |
#define ARP_HARDWARE_TYPE_H_P 0x0E |
#define ARP_HARDWARE_TYPE_H_V 0x00 |
#define ARP_HARDWARE_TYPE_L_P 0x0F |
#define ARP_HARDWARE_TYPE_L_V 0x01 |
#define ARP_OPCODE_H_P 0x14 |
#define ARP_OPCODE_L_P 0x15 |
#define ARP_OPCODE_REPLY_H_V 0x00 |
#define ARP_OPCODE_REPLY_L_V 0x02 |
#define ARP_OPCODE_REPLY_V 0x0002 |
#define ARP_OPCODE_REQUEST_H_V 0x00 |
#define ARP_OPCODE_REQUEST_L_V 0x01 |
#define ARP_OPCODE_REQUEST_V 0x0001 |
#define ARP_PACKET_LEN 28 |
#define ARP_PROTOCOL_H_P 0x10 |
#define ARP_PROTOCOL_H_V 0x08 |
#define ARP_PROTOCOL_L_P 0x11 |
#define ARP_PROTOCOL_L_V 0x00 |
#define ARP_PROTOCOL_SIZE_P 0x13 |
#define ARP_PROTOCOL_SIZE_V 0x04 |
#define ARP_SRC_IP_P 0x1C |
#define ARP_SRC_MAC_P 0x16 |
void ARP_error | ( | void | ) |
lleva a ARP a un estado de error
lo utilizan los procesos externos para "notificar" de errores (p.e. timeout)
Genera un paquete ARP para un determinado IP y MAC.
rxtx_buffer | un puntero al buffer generico de Rx/Tx. | |
dest_mac | MAC de destino del paq. ARP | |
dest_ip | IP de destino del paq. ARP |
hardware type = ethernet (0x0001)
protocol = IP (0x0800)
hardware length = 0x06
protocol length = 0x04
rellena ARP dest. y source MAC
setup arp destination and source ip address
void ARP_init | ( | void | ) |
inicializa banderas de la maquina de estados de ARP
evita que se ejecute por error (p.e on_process=0)
void arp_send_reply | ( | BYTE * | rxtx_buffer | ) |
Se utiliza inmediatamente despues de recibido un paquete ARP con el puntero apuntando al buffer del paquete
genera el ethernet header
cambia el tipo de paquete a reply
envia el paquete
Envia un paquete ARP Who_is preguntando por una IP.
rxtx_buffer | un puntero al buffer generico de Rx/Tx. | |
dest_ip | IP cuya MAC queremos averiguar |
genera el ethernet header
genera paquete ARP de REQUEST
set arp opcode is request
envia el paquete a la red
void ARP_start | ( | IP_ADDR | strt_ip | ) |
arranca la maquina de estados de ARP
strt_ip | IP del que se buscara MAC |
void ARP_step | ( | void | ) |
ejecuta un paso de la maquina de estados de ARP
averigua la MAC correspondiente a un IP
rxtx_buffer | un puntero al buffer generico de Rx/Tx. | |
dest_mac | puntero al lugar donde se guardara la MAC averiguada | |
dest_ip | MAC de destino del paq. ARP de respuesta |