X-Git-Url: https://git.llucax.com/z.facultad/66.09/etherled.git/blobdiff_plain/db76f3270c5bee0eb1b5ee71fa1946e8d5132d43..afe814271b1b8c0519595d12d5a9cad8a24a3cc9:/src/main.c?ds=sidebyside diff --git a/src/main.c b/src/main.c index 9714789..0708044 100644 --- a/src/main.c +++ b/src/main.c @@ -5,6 +5,7 @@ #include "reg51.h" #include "netdev.h" #include "eth.h" +#include "arp.h" #include "ip.h" #include "udp.h" #include "elp.h" @@ -54,8 +55,22 @@ void main(void) // Vemos que protocolo transporta switch (eth_proto) { - case ETH_ARP: // TODO: implementar ARP! - goto drop; // Tiramos el paquete + case ETH_ARP: + // Obtenemos paquete ARP + if (!arp_read_packet) // No es un paquete soportado + goto drop; // Tiramos el paquete + + // Terminamos recepción + netdev_recv_end(); + + // Respondemos + netdev_send_start(); + eth_write_frame_header(); + arp_write_packet(); + netdev_send_end(ETH_HEADER_SIZE + ARP_PACKET_SIZE); + + // Seguimos viaje + continue; case ETH_IP: // Parseamos cabecera IP