]> git.llucax.com Git - z.facultad/66.09/etherled.git/blob - src/arp.h
ARP implementado y andando (más pequeños bugfixes)!
[z.facultad/66.09/etherled.git] / src / arp.h
1 // vim: set et sw=4 sts=4 :     
2
3 #ifndef _ARP_H_
4 #define _ARP_H_
5
6 #include "types.h"
7 #include "eth.h"
8 #include "ip.h"
9
10 /** @file
11  * Paquete ARP.
12  *
13  *  0                   1                   2                   3   
14  *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
15  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16  * |          Hardware Type        |         Protocol Type         |
17  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
18  * | Hardware Size | Protocol Size |            Opcode             |
19  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
20  * |  Sender MAC (cant. de bytes especificados por Hardware size)  |
21  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
22  * |  Sender IP  (cant. de bytes especificados por Protocol size)  |
23  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
24  * |  Target MAC (cant. de bytes especificados por Hardware size)  |
25  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
26  * |  Target IP  (cant. de bytes especificados por Protocol size)  |
27  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28  * 
29  * Nosotros sólo implementamos la respuesta a un request ARP, ya que sólo
30  * respondemos paquetes, nunca tenemos que enviar un paquete a una IP
31  * arbitraria. De esta manera nos evitamos, además, la necesidad de tener una
32  * tabla de cache ARP y de enviar peticiones ARP.
33  */
34
35 /** Tamaño de la cabecera ARP (en bytes) */
36 #define ARP_HEADER_SIZE 8
37
38 /** Tamaño del payload del paquete ARP que soportamos nosotros (en bytes) */
39 #define ARP_PAYLOAD_SIZE (2*ETH_ADDR_SIZE + 2*IP_ADDR_SIZE)
40
41 /** Tamaño del paquete ARP que soportamos nosotros (en bytes) */
42 #define ARP_PACKET_SIZE (ARP_HEADER_SIZE + ARP_PAYLOAD_SIZE)
43
44 /** Lee el paquete ARP.
45  *
46  * Si devuelve false (0) es que hubo un error o es un paquete no soportado, por
47  * lo que hay que descartarlo.
48  */
49 bool arp_read_packet();
50
51 /** Escribe el paquete ARP.
52  *
53  * Responde al request recibido con la ip de ip_addr_local.
54  */
55 void arp_write_packet();
56
57 #endif /* _ARP_H_ */