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--;
*/
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 */
}
*/
int
-mask2plen (u_int32_t mask)
+mask2plen(u_int32_t mask)
{
u_int32_t bitmasks[33] = {
0x00000000,
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, ...)