[ovs-dev] [PATCH] multipath: Correctly calculate number of required destination bits.

Ethan Jackson ethan at nicira.com
Fri Jan 13 00:18:33 UTC 2012


Looks good.

Ethan

On Tue, Dec 27, 2011 at 13:37, Ben Pfaff <blp at nicira.com> wrote:
> The previous calculation was wrong when n_links was a power of 2.
>
> Reported-by: Paul Ingram <paul at nicira.com>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  lib/multipath.c |    2 +-
>  lib/util.c      |    8 ++++++++
>  lib/util.h      |    1 +
>  3 files changed, 10 insertions(+), 1 deletions(-)
>
> diff --git a/lib/multipath.c b/lib/multipath.c
> index f68dafd..adc000d 100644
> --- a/lib/multipath.c
> +++ b/lib/multipath.c
> @@ -37,7 +37,7 @@ int
>  multipath_check(const struct nx_action_multipath *mp, const struct flow *flow)
>  {
>     uint32_t n_links = ntohs(mp->max_link) + 1;
> -    size_t min_n_bits = log_2_floor(n_links) + 1;
> +    size_t min_n_bits = log_2_ceil(n_links);
>     int ofs = nxm_decode_ofs(mp->ofs_nbits);
>     int n_bits = nxm_decode_n_bits(mp->ofs_nbits);
>     int error;
> diff --git a/lib/util.c b/lib/util.c
> index e02f59f..8379c9a 100644
> --- a/lib/util.c
> +++ b/lib/util.c
> @@ -664,6 +664,14 @@ log_2_floor(uint32_t n)
>  #endif
>  }
>
> +/* Given a 32 bit word 'n', calculates ceil(log_2('n')).  It is an error to
> + * call this function with 'n' == 0. */
> +int
> +log_2_ceil(uint32_t n)
> +{
> +    return log_2_floor(n) + !IS_POW2(n);
> +}
> +
>  /* Returns the number of trailing 0-bits in 'n', or 32 if 'n' is 0. */
>  int
>  ctz(uint32_t n)
> diff --git a/lib/util.h b/lib/util.h
> index 61039be..b2052f3 100644
> --- a/lib/util.h
> +++ b/lib/util.h
> @@ -203,6 +203,7 @@ char *abs_file_name(const char *dir, const char *file_name);
>
>  void ignore(bool x OVS_UNUSED);
>  int log_2_floor(uint32_t);
> +int log_2_ceil(uint32_t);
>  int ctz(uint32_t);
>
>  bool is_all_zeros(const uint8_t *, size_t);
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list