summaryrefslogtreecommitdiffstats
path: root/isisd/iso_checksum.c
diff options
context:
space:
mode:
authorStephen Hemminger <stephen.hemminger@vyatta.com>2008-10-13 12:12:33 -0700
committerStephen Hemminger <stephen.hemminger@vyatta.com>2008-10-13 12:12:33 -0700
commitd3e384e4f00aa90db4310f82f3cbe6528e256334 (patch)
tree716c9dfa64dd9fdc4b05b377a2a19b7b216c4856 /isisd/iso_checksum.c
parentd0cee3d3d7267f8f5c1d1ffd5c5fd8802a9db987 (diff)
parent41dc3488cf127a1e23333459a0c316ded67f7ff3 (diff)
downloadquagga-d3e384e4f00aa90db4310f82f3cbe6528e256334.tar.bz2
quagga-d3e384e4f00aa90db4310f82f3cbe6528e256334.tar.xz
Merge branch 'master' of /home/shemminger/src/quagga into upstream
Resolve all conflicts by using upstream version.
Diffstat (limited to 'isisd/iso_checksum.c')
-rw-r--r--isisd/iso_checksum.c37
1 files changed, 9 insertions, 28 deletions
diff --git a/isisd/iso_checksum.c b/isisd/iso_checksum.c
index 16f18e50..abd101b9 100644
--- a/isisd/iso_checksum.c
+++ b/isisd/iso_checksum.c
@@ -23,6 +23,7 @@
#include <zebra.h>
#include "iso_checksum.h"
+#include "checksum.h"
/*
* Calculations of the OSI checksum.
@@ -47,14 +48,10 @@
int
iso_csum_verify (u_char * buffer, int len, uint16_t * csum)
{
- u_int8_t *p;
+ u_int16_t checksum;
u_int32_t c0;
u_int32_t c1;
- u_int16_t checksum;
- int i, partial_len;
- p = buffer;
- checksum = 0;
c0 = *csum & 0xff00;
c1 = *csum & 0x00ff;
@@ -70,33 +67,15 @@ iso_csum_verify (u_char * buffer, int len, uint16_t * csum)
if (c0 == 0 || c1 == 0)
return 1;
- /*
- * Otherwise initialize to zero and calculate...
- */
- c0 = 0;
- c1 = 0;
-
- while (len)
- {
- partial_len = MIN(len, 5803);
-
- for (i = 0; i < partial_len; i++)
- {
- c0 = c0 + *(p++);
- c1 += c0;
- }
+ /* Offset of checksum from the start of the buffer */
+ int offset = (u_char *) csum - buffer;
- c0 = c0 % 255;
- c1 = c1 % 255;
-
- len -= partial_len;
- }
-
- if (c0 == 0 && c1 == 0)
+ checksum = fletcher_checksum(buffer, len, offset);
+ if (checksum == *csum)
return 0;
-
return 1;
}
+<<<<<<< HEAD:isisd/iso_checksum.c
/*
* Creates the checksum. *csum points to the position of the checksum in the
@@ -191,3 +170,5 @@ iso_csum_create (u_char * buffer, int len, u_int16_t n)
/* return the checksum for user usage */
return checksum;
}
+=======
+>>>>>>> 41dc3488cf127a1e23333459a0c316ded67f7ff3:isisd/iso_checksum.c