Problem: OpenPGM may calculate incorrect checksums when sending RDATA packets if no ODATA packet has been sent before. When and why this happens exactly is unknown. Solution: Always force recomputation of checksums until a more suitable solution is found. --- openpgm-r1135-pristine/pgm/source.c 2010-09-09 03:24:47.000000000 +0200 +++ openpgm-svn-r1135/pgm/source.c 2010-09-30 18:32:04.000000000 +0200 @@ -2295,7 +2295,7 @@ header->pgm_checksum = 0; const size_t pgm_header_len = tpdu_length - ntohs(header->pgm_tsdu_length); uint32_t unfolded_header = pgm_csum_partial (header, pgm_header_len, 0); - uint32_t unfolded_odata = pgm_txw_get_unfolded_checksum (skb); + uint32_t unfolded_odata = pgm_csum_partial (skb->data, ntohs(header->pgm_tsdu_length), 0); header->pgm_checksum = pgm_csum_fold (pgm_csum_block_add (unfolded_header, unfolded_odata, pgm_header_len)); /* congestion control */