From 9ec6b11147c881bbb9ffdc8a2b242c6568f793df Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Fri, 26 Dec 2008 17:41:02 +0100 Subject: [PATCH] FDP seems to use a non-flawed checksum --- src/cdp.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cdp.c b/src/cdp.c index 554448b5..55c66224 100644 --- a/src/cdp.c +++ b/src/cdp.c @@ -192,7 +192,7 @@ cdp_send(struct lldpd *global, struct lldpd_chassis *chassis, } len -= sizeof(struct ieee8023); llc.ether.size = htons(len); - ch.checksum = iov_checksum(&iov[1], c - 1, 1); + ch.checksum = iov_checksum(&iov[1], c - 1, (version != 0) ? 1 : 0); if (writev((hardware->h_raw_real > 0) ? hardware->h_raw_real : hardware->h_raw, iov, c) == -1) { @@ -291,7 +291,13 @@ cdp_decode(struct lldpd *cfg, char *frame, int s, chassis->c_ttl = ntohs(ch->ttl); iov.iov_len = s - f; iov.iov_base = frame + f; - cksum = iov_checksum(&iov, 1, 1); + cksum = iov_checksum(&iov, 1, +#ifdef ENABLE_FDP + !fdp /* fdp = 0 -> cisco checksum */ +#else + 1 /* cisco checksum */ +#endif + ); /* An off-by-one error may happen. Just ignore it */ if ((cksum != 0) && (cksum != 0xfffe)) { LLOG_INFO("incorrect CDP/FDP checksum for frame received on %s (%d)", -- 2.39.5