]> The Tcpdump Group git mirrors - tcpdump/blobdiff - util.c
Address Michael's comments.
[tcpdump] / util.c
diff --git a/util.c b/util.c
index 784b09b788b03f17e12dccc099321613e50a2ae3..a2ef36d70b78ae53f151e5d08912356ccb589384 100644 (file)
--- a/util.c
+++ b/util.c
@@ -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, ...)