]> git.llucax.com Git - z.facultad/66.09/etherled.git/blobdiff - src/main.c
Se mejora notablemente la interfaz de línea de comandos.
[z.facultad/66.09/etherled.git] / src / main.c
index 9714789a5ad855b0e53a54c70cca47e7f46be20d..070804402c392471e2df984cfb5a4a9c761bbcfa 100644 (file)
@@ -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