Not tested at all. --- proto/ospf/lsalib.c | 21 ++------------------- 1 files changed, 2 insertions(+), 19 deletions(-) diff --git a/proto/ospf/lsalib.c b/proto/ospf/lsalib.c index 35f02dc..b8fd97d 100644 --- a/proto/ospf/lsalib.c +++ b/proto/ospf/lsalib.c @@ -180,29 +180,12 @@ buf_dump(const char *hdr, const byte *buf, int blen) #define MODX 4102 #define LSA_CHECKSUM_OFFSET 15 -/* FIXME This is VERY uneficient, I have huge endianity problems */ void lsasum_calculate(struct ospf_lsa_header *h, void *body) { u16 length = h->length; - // log(L_WARN "Checksum %R %R %d start (len %d)", h->id, h->rt, h->type, length); - htonlsah(h, h); - htonlsab(body, body, length - sizeof(struct ospf_lsa_header)); - - /* - char buf[1024]; - memcpy(buf, h, sizeof(struct ospf_lsa_header)); - memcpy(buf + sizeof(struct ospf_lsa_header), body, length - sizeof(struct ospf_lsa_header)); - buf_dump("CALC", buf, length); - */ - (void) lsasum_check(h, body); - - // log(L_WARN "Checksum result %4x", h->checksum); - - ntohlsah(h, h); - ntohlsab(body, body, length - sizeof(struct ospf_lsa_header)); } /* @@ -250,8 +233,8 @@ lsasum_check(struct ospf_lsa_header *h, void *body) c0 %= 255; c1 %= 255; } - - x = ((length - LSA_CHECKSUM_OFFSET) * c0 - c1) % 255; + /* the (int) cast is need to ensure % is signed */ + x = (int)((length - LSA_CHECKSUM_OFFSET) * c0 - c1) % 255; if (x <= 0) x += 255; y = 510 - c0 - x; -- 1.6.4.4