X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvat%2Fip_types.c;h=f4dcc96febe5b3f4648d1485e0f51791478c3371;hb=bf82a66de7653921e3c25ae444d372d2eddeee9f;hp=cd08c5417ad477cac22bc116d8aaaf174affe9c7;hpb=3ec09e9243dceb78e7548725281b0da8eddf72b1;p=vpp.git diff --git a/src/vat/ip_types.c b/src/vat/ip_types.c index cd08c5417ad..f4dcc96febe 100644 --- a/src/vat/ip_types.c +++ b/src/vat/ip_types.c @@ -64,9 +64,12 @@ uword unformat_ip_prefix (unformat_input_t * input, va_list * args) { ip_prefix_t *a = va_arg (*args, ip_prefix_t *); + /* %d writes more than a u8 */ + int plen; if (unformat (input, "%U/%d", unformat_ip_address, &ip_prefix_addr (a), - &ip_prefix_len (a))) + &plen)) { + ip_prefix_len (a) = plen; if ((ip_prefix_version (a) == AF_IP4 && 32 < ip_prefix_len (a)) || (ip_prefix_version (a) == AF_IP6 && 128 < ip_prefix_len (a))) { @@ -341,23 +344,24 @@ ip_prefix_copy (void *dst, void *src) } int -ip_prefix_cmp (ip_prefix_t * p1, ip_prefix_t * p2) +ip_prefix_cmp (const ip_prefix_t *ipp1, const ip_prefix_t *ipp2) { + ip_prefix_t p1 = *ipp1, p2 = *ipp2; int cmp = 0; - ip_prefix_normalize (p1); - ip_prefix_normalize (p2); + ip_prefix_normalize (&p1); + ip_prefix_normalize (&p2); - cmp = ip_address_cmp (&ip_prefix_addr (p1), &ip_prefix_addr (p2)); + cmp = ip_address_cmp (&ip_prefix_addr (&p1), &ip_prefix_addr (&p2)); if (cmp == 0) { - if (ip_prefix_len (p1) < ip_prefix_len (p2)) + if (ip_prefix_len (&p1) < ip_prefix_len (&p2)) { cmp = 1; } else { - if (ip_prefix_len (p1) > ip_prefix_len (p2)) + if (ip_prefix_len (&p1) > ip_prefix_len (&p2)) cmp = 2; } } @@ -511,16 +515,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; } /*