diff options
Diffstat (limited to '3rdparty/openpgm-svn-r1135-0002-correct-checksum-calculation.patch')
-rw-r--r-- | 3rdparty/openpgm-svn-r1135-0002-correct-checksum-calculation.patch | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/3rdparty/openpgm-svn-r1135-0002-correct-checksum-calculation.patch b/3rdparty/openpgm-svn-r1135-0002-correct-checksum-calculation.patch new file mode 100644 index 0000000..b78dc3c --- /dev/null +++ b/3rdparty/openpgm-svn-r1135-0002-correct-checksum-calculation.patch @@ -0,0 +1,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 */ |