summaryrefslogtreecommitdiffstats
path: root/3rdparty/openpgm-svn-r1135-0002-correct-checksum-calculation.patch
blob: b78dc3c05ddd280ebf408ed50d5e7acbe417d368 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 */