bool udp_checksum_ok()
{
// Verifico si falta sumar algo (UDP debe sumar de a un word)
- if (byte_count == (udp_dgram_len - UDP_HEADER_SIZE))
+ if (byte_count % 2)
sum(WORD(last_byte, 0x00)); // Relleno el byte que falta con 0x00
return !(uint16)~checksum;
}
void udp_write_checksum(byte offset)
{
// Verifico si falta sumar algo (UDP debe sumar de a un word)
- if (byte_count == (udp_dgram_len - UDP_HEADER_SIZE))
+ if (byte_count % 2)
sum(WORD(last_byte, 0x00)); // Relleno el byte que falta con 0x00
// Escribo checksum en el buffer de la placa de red
netdev_write_start_at(offset + 6, 2); // 6 bytes de offset hasta el checksum