1 // vim: set et sw=4 sts=4 :
12 // Apagamos todos los leds
15 // Inicializamos dispositivo de red
19 while(1); // Si falla init nos quedamos bobos
23 ip_addr_local[0] = 10;
24 ip_addr_local[1] = 10;
25 ip_addr_local[2] = 10;
26 ip_addr_local[3] = 100;
28 // Inicializo puerto UDP
29 udp_port_local = 9000;
34 byte len = netdev_recv_start();
36 if (!len) // no recibimos nada (vĂ¡lido)
37 continue; // Probamos de nuevo
42 // Parseamos cabecera ethernet
43 if (!eth_read_frame_header()) // No es un buen header
44 goto drop; // Tiramos el paquete
47 // Vemos que protocolo transporta
50 case ETH_ARP: // FIXME, implementar ARP!
51 goto drop; // Tiramos el paquete
55 // Parseamos cabecera IP
56 if (!ip_read_packet_header()) // No es un buen header
57 goto drop; // Tiramos el paquete
60 // Vemos que protocolo transporta
63 case IP_ICMP: // FIXME, implementar ICMP!
64 goto drop; // Tiramos el paquete
68 // Parseamos cabecera UDP
69 if (!udp_read_dgram_header()) // No es un buen header
70 goto drop; // Tiramos el paquete
72 printb(udp_dgram_len, 0x40);
74 // Nuestro protocolo, por ahora un simple echo!
75 for (i = 8; i < udp_dgram_len; ++i) // 8 por la cabecera UDP
77 leds0 = ~netdev_recv_byte();
81 i = (udp_dgram_len % 2) ? udp_dgram_len : (udp_dgram_len + 1);
82 for (i += 34; i < len; ++i) // 8 por la cabecera UDP