- if (TTEST2(bp[0], len) && in_cksum((const u_short*)bp, len, 0))
- printf(" (bad vrrp cksum %x!)",
- EXTRACT_16BITS(&bp[6]));
- printf(" addrs");
+ if (version == 2 && ND_TTEST2(bp[0], len)) {
+ struct cksum_vec vec[1];
+
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ if (in_cksum(vec, 1)) {
+ ND_TCHECK_16BITS(&bp[6]);
+ ND_PRINT((ndo, ", (bad vrrp cksum %x)",
+ EXTRACT_16BITS(&bp[6])));
+ }
+ }
+
+ if (version == 3 && ND_TTEST2(bp[0], len)) {
+ uint16_t cksum = nextproto4_cksum(ndo, (const struct ip *)bp2, bp,
+ len, len, IPPROTO_VRRP);
+ if (cksum) {
+ ND_TCHECK_16BITS(&bp[6]);
+ ND_PRINT((ndo, ", (bad vrrp cksum %x)",
+ EXTRACT_16BITS(&bp[6])));
+ }
+ }
+
+ ND_PRINT((ndo, ", addrs"));