- 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_TTEST_LEN(bp, len)) {
+ struct cksum_vec vec[1];
+
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ if (in_cksum(vec, 1))
+ ND_PRINT(", (bad vrrp cksum %x)",
+ GET_BE_U_2(bp + 6));
+ }
+
+ if (version == 3 && ND_TTEST_LEN(bp, len)) {
+ uint16_t cksum;
+
+ if (ver == 4)
+ cksum = nextproto4_cksum(ndo, (const struct ip *)bp2, bp,
+ len, len, IPPROTO_VRRP);
+ else
+ cksum = nextproto6_cksum(ndo, (const struct ip6_hdr *)bp2, bp,
+ len, len, IPPROTO_VRRP);
+ if (cksum)
+ ND_PRINT(", (bad vrrp cksum %x)",
+ GET_BE_U_2(bp + 6));
+ }
+
+ ND_PRINT(", addrs");