]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-vrrp.c
Handle very large -f files by rejecting them.
[tcpdump] / print-vrrp.c
index 4e5da1455a6b89023e8d65f0b0ad9e5472a5e86b..a39766767e40d7a054cae8f3d2c96789172ed317 100644 (file)
  * FOR A PARTICULAR PURPOSE.
  */
 
-#define NETDISSECT_REWORKED
+/* \summary: Virtual Router Redundancy Protocol (VRRP) printer */
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
 
-#include "interface.h"
+#include "netdissect.h"
 #include "extract.h"
 #include "addrtoname.h"
 
@@ -127,7 +128,7 @@ vrrp_print(netdissect_options *ndo,
                ND_PRINT((ndo, ", authtype %s", tok2str(auth2str, NULL, auth_type)));
                ND_PRINT((ndo, ", intvl %us, length %u", bp[5], len));
        } else { /* version == 3 */
-               u_int16_t intvl = (bp[4] & 0x0f) << 8 | bp[5];
+               uint16_t intvl = (bp[4] & 0x0f) << 8 | bp[5];
                ND_PRINT((ndo, ", intvl %ucs, length %u", intvl, len));
        }
 
@@ -141,17 +142,21 @@ vrrp_print(netdissect_options *ndo,
 
                        vec[0].ptr = bp;
                        vec[0].len = len;
-                       if (in_cksum(vec, 1))
+                       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)) {
-                       u_int16_t cksum = nextproto4_cksum(ndo, (struct ip *)bp2, bp,
+                       uint16_t cksum = nextproto4_cksum(ndo, (const struct ip *)bp2, bp,
                                len, len, IPPROTO_VRRP);
-                       if (cksum)
+                       if (cksum) {
+                               ND_TCHECK_16BITS(&bp[6]);
                                ND_PRINT((ndo, ", (bad vrrp cksum %x)",
                                        EXTRACT_16BITS(&bp[6])));
+                       }
                }
 
                ND_PRINT((ndo, ", addrs"));