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 = 9876;
36 if (!netdev_recv_start()) // 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: // TODO: 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: // TODO: 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 netdev_read_start(udp_dgram_len-UDP_HEADER_SIZE);
76 for (i = 0; i < udp_dgram_len-UDP_HEADER_SIZE; ++i)
77 buf[i] = netdev_read_byte();
83 eth_write_frame_header();
84 ip_write_packet_header();
85 udp_write_dgram_header();
86 netdev_write_start(udp_dgram_len-UDP_HEADER_SIZE);
87 for (i = 0; i < udp_dgram_len-UDP_HEADER_SIZE; ++i)
88 netdev_write_byte(buf[i]);
90 netdev_send_end(ETH_HEADER_SIZE+IP_HEADER_SIZE+udp_dgram_len);