X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/0cd29d29174b83e6e700efbe77624eb1dabb8094..ad7a38341c19e71e3595c17368ac18f08b71482d:/util.c?ds=sidebyside diff --git a/util.c b/util.c index 784b09b7..4d25d6f0 100644 --- a/util.c +++ b/util.c @@ -188,12 +188,12 @@ ts_print(register const struct timeval *tvp) if (b_sec == 0) { /* init timestamp for first packet */ b_usec = tvp->tv_usec; - b_sec = tvp->tv_sec; + b_sec = tvp->tv_sec; } d_usec = tvp->tv_usec - b_usec; d_sec = tvp->tv_sec - b_sec; - + while (d_usec < 0) { d_usec += 1000000; d_sec--; @@ -259,21 +259,21 @@ relts_print(int secs) */ int -print_unknown_data(const u_char *cp,const char *ident,int len) +print_unknown_data(netdissect_options *ndo, const u_char *cp,const char *ident,int len) { if (len < 0) { - printf("%sDissector error: print_unknown_data called with negative length", - ident); + ND_PRINT((ndo,"%sDissector error: print_unknown_data called with negative length", + ident)); return(0); } if (snapend - cp < len) len = snapend - cp; if (len < 0) { - printf("%sDissector error: print_unknown_data called with pointer past end of packet", - ident); + ND_PRINT((ndo,"%sDissector error: print_unknown_data called with pointer past end of packet", + ident)); return(0); } - hex_print(ident,cp,len); + hex_print(ndo, ident,cp,len); return(1); /* everything is ok */ } @@ -415,7 +415,7 @@ tok2strary_internal(register const char **lp, int n, register const char *fmt, */ int -mask2plen (u_int32_t mask) +mask2plen(u_int32_t mask) { u_int32_t bitmasks[33] = { 0x00000000, @@ -439,6 +439,35 @@ mask2plen (u_int32_t mask) return (prefix_len); } +#ifdef INET6 +int +mask62plen(const u_char *mask) +{ + u_char bitmasks[9] = { + 0x00, + 0x80, 0xc0, 0xe0, 0xf0, + 0xf8, 0xfc, 0xfe, 0xff + }; + int byte; + int cidr_len = 0; + + for (byte = 0; byte < 16; byte++) { + u_int bits; + + for (bits = 0; bits < (sizeof (bitmasks) / sizeof (bitmasks[0])); bits++) { + if (mask[byte] == bitmasks[bits]) { + cidr_len += bits; + break; + } + } + + if (mask[byte] != 0xff) + break; + } + return (cidr_len); +} +#endif /* INET6 */ + /* VARARGS */ void error(const char *fmt, ...)