3 /** tipos de paquetes transportados soportados */
4 enum { IP = 0x0800, ARP = 0x0806 };
6 byte eth_addr_local[ETH_ADDR_SIZE];
8 byte eth_addr_remote[ETH_ADDR_SIZE];
12 bool eth_read_frame_header()
14 /* variable para iterar */
16 /* vemos si es para nosotros */
17 for (i = 0; i < ETH_ADDR_SIZE; ++i)
18 if (eth_addr_local[i] != net_getb())
19 return false; /* no es para nosotros (drop) */
20 /* obtenemos MAC de origen */
21 for (i = 0; i < ETH_ADDR_SIZE; ++i)
22 eth_addr_remote[i] = net_getb();
23 /* obtenemos tipo de protocolo transportado por el frame, (sólo
24 * aceptamos IP y ARP) */
28 eth_frame_arp = false;
34 return false; /* drop */
39 void eth_write_frame_header()
41 /* variable para iterar */
43 /* mandamos como MAC de destino la remota */
44 for (i = 0; i < ETH_ADDR_SIZE; ++i)
45 net_putb(eth_addr_remote[i]);
46 /* y como fuente la nuestra */
47 for (i = 0; i < ETH_ADDR_SIZE; ++i)
48 net_putb(eth_addr_local[i]);
49 /* escribimos el tipo de paquete que transporta el frame */
50 net_putw(eth_frame_arp ? ARP : IP);