bool udp_read_dgram_header()
{
byte tmp;
+ bit ok = true;
+ netdev_read_start(UDP_HEADER_SIZE);
/* reseteamos checksum */
checksum = 0;
/* el UDP tiene un checksum que incluye parte de la cabecera IP */
sum(ip_packet_len - 20);
/* de ahora en más todos los datos del checksum corresponden a UDP */
/* puerto origen (remoto) */
- udp_port_remote = netdev_recv_word();
+ udp_port_remote = netdev_read_word();
/* agregamos puerto de origen al checksum */
sum(udp_port_remote);
/* sólo aceptamos datagramas a nuestro puerto */
- if (netdev_recv_word() != udp_port_local)
- return false; /* drop */
+ if (netdev_read_word() != udp_port_local)
+ ok = false; /* drop */
/* agregamos puerto de destino al checksum */
sum(udp_port_local);
/* tamaño del datagrama */
- if (tmp = netdev_recv_byte()) /* no soportamos más de 255 bytes */
- return false; /* drop */
- udp_dgram_len = netdev_recv_byte(); /* parte baja */
+ if (tmp = netdev_read_byte()) /* no soportamos más de 255 bytes */
+ ok = false; /* drop */
+ udp_dgram_len = netdev_read_byte(); /* parte baja */
if (udp_dgram_len < 8) /* no puede ser más chico que sus cabeceras */
- return false; /* drop */
+ ok = false; /* drop */
/* agregamos tamaño al checksum */
sum(WORD(tmp, udp_dgram_len));
/* agregamos checksum al checksum */
- sum(netdev_recv_word());
+ sum(netdev_read_word());
/* falta agregar el cuerpo del mensaje para verificar la suma
* esto debe hacerlo el protocolo que sigue para poder seguir obteniendo
* los datos de la placa de red byte a byte */
+ netdev_read_end();
return true;
}
uint16 udp_read_word()
{
- uint16 w = netdev_recv_word();
+ uint16 w = netdev_read_word();
sum(w);
return w;
}
void udp_write_dgram_header()
{
+ netdev_write_start(UDP_HEADER_SIZE);
/* reseteamos checksum */
checksum = 0;
/* el UDP tiene un checksum que incluye parte de la cabecera IP */
/* tamaño del paquete UDP (IP sin las cabeceras, que son 20 bytes) */
sum(ip_packet_len - 20); // FIXME
/* puerto origen */
- netdev_send_word(udp_port_local);
+ netdev_write_word(udp_port_local);
sum(udp_port_local);
/* puerto destino */
- netdev_send_word(udp_port_remote);
+ netdev_write_word(udp_port_remote);
sum(udp_port_remote);
/* tamaño del datagrama */
- netdev_send_byte(0x00); /* parte alta en 0 porque no soportamos más de 255 */
- netdev_send_byte(udp_dgram_len);
+ netdev_write_byte(0x00); /* parte alta en 0 porque no soportamos más de 255 */
+ netdev_write_byte(udp_dgram_len);
sum(WORD(0x00, udp_dgram_len));
/* indicamos que no se usa checksum */
- netdev_send_word(0x0000);
+ netdev_write_word(0x0000);
sum(0x0000);
+ netdev_write_end();
}
void udp_write_word(uint16 w)
{
sum(w);
- netdev_send_word(w);
+ netdev_write_word(w);
}
void udp_write_checksum()