8 * Estructura de un frame ethernet.
11 * /--- 8 ----/--- 6 ----/--- 6 ----/- 2 --/- 46-1500 -/- 4 -/ bytes
12 * +----------+----------+----------+------+-----------+-----+
13 * | preamble | dst addr | src addr | type | data | crc |
14 * +----------+----------+----------+------+-----------+-----+
17 * type es 0x0800 para IP y 0x0806 para ARP, los únicos dos protocolos que
18 * soportamos sobre ethernet.
19 * El preamble y el crc los pone la placa de red automáticamente.
22 /** Tamaño de dirección MAC (en bytes) */
23 #define ETH_ADDR_SIZE 6
25 /** Dirección MAC nuestra */
26 extern byte eth_addr_local[ETH_ADDR_SIZE];
28 /** Dirección MAC de destino */
29 extern byte eth_addr_remote[ETH_ADDR_SIZE];
31 /** Indica si el frame transporta ARP (si no transporta IP) */
32 extern bool eth_frame_arp; /* FIXME: debería ser un bit manejado con ASM supongo */
35 * Lee la cabecera del frame ethernet.
37 * Deja en mac_addr_remote la MAC de origen y eth_frame_arp en 1 si es ARP.
38 * Si devuelve false (0) hay un error o es un frame no soportado, por lo que
39 * hay que descartarlo.
41 bool eth_read_frame_header();
44 * Escribe la cabecera del frame ethernet.
46 * Pone como destino a mac_addr_remote, como origen a mac_addr_local y como
47 * tipo ARP si eth_frame_arp está en 1 (si no el tipo es IP).
49 void eth_write_frame_header();