summaryrefslogtreecommitdiff
path: root/lib/checksum.h
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2008-11-16 18:34:19 +0000
committerPaul Jakma <paul@quagga.net>2008-11-16 18:47:02 +0000
commit5d4b8cf2faba9f5386810a7c70837e5b7fae3572 (patch)
treeec89383f7bfd4684a0cde15648e5f00e8d2d8f7b /lib/checksum.h
parent41dc3488cf127a1e23333459a0c316ded67f7ff3 (diff)
[lib] Switch Fletcher checksum back to old ospfd version
* lib/checksum.c: (fletcher_checksum) Switch the second phase of the checksum back to the old ospfd logic. The isisd-derived version: a) is very hard to follow b) had some kind of subtle bug that caused it be wrong when c0=0 and c1=254 (potentially fixable by doing the mods before adjusting x and y) Additionally: - explicitely cast expressions using non-internal variables to int, to ensure the result is signed. - defensively change the length argument to 'size_t', to ensure the code works with that argument being unsigned.. Thanks to Joakim Tjernlund for the investigative work into this bug. * tests/test-checksum.c: new file to exercise the checksum code.
Diffstat (limited to 'lib/checksum.h')
-rw-r--r--lib/checksum.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/checksum.h b/lib/checksum.h
index d3ce9302..da1d3cba 100644
--- a/lib/checksum.h
+++ b/lib/checksum.h
@@ -1,2 +1,2 @@
extern int in_cksum(void *, int);
-extern u_int16_t fletcher_checksum(u_char * buffer, int len, u_int16_t offset);
+extern u_int16_t fletcher_checksum(u_char *, const size_t len, const uint16_t offset);