ip: fix IPv6 mask to prefix length conversion 16/27016/3
authorAndreas Schultz <andreas.schultz@travelping.com>
Tue, 12 May 2020 12:41:16 +0000 (14:41 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Mon, 1 Jun 2020 15:41:08 +0000 (15:41 +0000)
make sure we don't pass a 0 (zero) to log2.

Type: fix

Signed-off-by: Andreas Schultz <andreas.schultz@travelping.com>
Change-Id: Ib3386ad4686835d3836f48294cee4058e897847a

src/vat/ip_types.c
src/vnet/ip/ip_types.c

index cd08c54..5041c12 100644 (file)
@@ -511,16 +511,11 @@ ip6_prefix_max_address_host_order (ip6_address_t * ip, u8 plen,
 u32
 ip6_mask_to_preflen (ip6_address_t * mask)
 {
-  u8 first1, first0;
-  if (mask->as_u64[0] == 0 && mask->as_u64[1] == 0)
-    return 0;
-  first1 = log2_first_set (clib_net_to_host_u64 (mask->as_u64[1]));
-  first0 = log2_first_set (clib_net_to_host_u64 (mask->as_u64[0]));
-
-  if (first1 != 0)
-    return 128 - first1;
-  else
-    return 64 - first0;
+  if (mask->as_u64[1] != 0)
+    return 128 - log2_first_set (clib_net_to_host_u64 (mask->as_u64[1]));
+  if (mask->as_u64[0] != 0)
+    return 64 - log2_first_set (clib_net_to_host_u64 (mask->as_u64[0]));
+  return 0;
 }
 
 /*
index cd08c54..5041c12 100644 (file)
@@ -511,16 +511,11 @@ ip6_prefix_max_address_host_order (ip6_address_t * ip, u8 plen,
 u32
 ip6_mask_to_preflen (ip6_address_t * mask)
 {
-  u8 first1, first0;
-  if (mask->as_u64[0] == 0 && mask->as_u64[1] == 0)
-    return 0;
-  first1 = log2_first_set (clib_net_to_host_u64 (mask->as_u64[1]));
-  first0 = log2_first_set (clib_net_to_host_u64 (mask->as_u64[0]));
-
-  if (first1 != 0)
-    return 128 - first1;
-  else
-    return 64 - first0;
+  if (mask->as_u64[1] != 0)
+    return 128 - log2_first_set (clib_net_to_host_u64 (mask->as_u64[1]));
+  if (mask->as_u64[0] != 0)
+    return 64 - log2_first_set (clib_net_to_host_u64 (mask->as_u64[0]));
+  return 0;
 }
 
 /*