From: Leandro Lucarella Date: Thu, 8 Dec 2005 07:37:04 +0000 (+0000) Subject: Bugfix en el cálculo de checksum. X-Git-Tag: 0.1-recibe-matriz-raw-por-udp~22 X-Git-Url: https://git.llucax.com/z.facultad/66.09/etherled.git/commitdiff_plain/63fb8e8cb0d82dcef936ae5bee2e3374c907c297 Bugfix en el cálculo de checksum. --- diff --git a/src/udp.c b/src/udp.c index a7b93fa..9738341 100644 --- a/src/udp.c +++ b/src/udp.c @@ -23,7 +23,7 @@ static void sum(uint16 w) bool udp_read_dgram_header() { - uint16 p; + byte tmp; /* reseteamos checksum */ checksum = 0; /* el UDP tiene un checksum que incluye parte de la cabecera IP */ @@ -43,19 +43,18 @@ bool udp_read_dgram_header() /* agregamos puerto de origen al checksum */ sum(udp_port_remote); /* sólo aceptamos datagramas a nuestro puerto */ - p = netdev_recv_word(); - if (p != udp_port_local) + if (netdev_recv_word() != udp_port_local) return false; /* drop */ /* agregamos puerto de destino al checksum */ sum(udp_port_local); /* tamaño del datagrama */ - if (netdev_recv_byte()) /* no soportamos más de 255 bytes */ + if (tmp = netdev_recv_byte()) /* no soportamos más de 255 bytes */ return false; /* drop */ - udp_dgram_len = netdev_recv_byte(); + udp_dgram_len = netdev_recv_byte(); /* parte baja */ if (udp_dgram_len < 8) /* no puede ser más chico que sus cabeceras */ return false; /* drop */ /* agregamos tamaño al checksum */ - sum(udp_dgram_len); + sum(WORD(tmp, udp_dgram_len)); /* agregamos checksum al checksum */ sum(netdev_recv_word()); /* falta agregar el cuerpo del mensaje para verificar la suma