On Sun, Feb 9, 2014 at 9:56 AM, Jarno Rajahalme <jrajaha...@nicira.com> wrote: > >> On Feb 8, 2014, at 12:49 AM, Kmindg G <kmi...@gmail.com> wrote: >> >> Hi all, >> I have a little question about miniflow_hash(). >> At the end of miniflow_hash, "p - flow->values" is used as the second >> paramter of mhash_finish. But "p - flow->valuse" is not the number of >> bytes which has been added to hash in miniflow_hash. The second >> parameter should be "sizeof hash_map + count_1bits(hash_map) * sizeof >> *p". >> Is this a real problem or I'm missing something? >> > > It is not a real problem. The reason for adding the count of bytes at the > finishing step is to differentiate between inputs of different lengths that > would otherwise be made the same due to zero padding to 32 bits. > > Miniflows are always a multiple of 32 bits, so any consistent value for the > given input is fine.
Thanks for explanation. > > Jarno > >> >> diff --git a/lib/flow.c b/lib/flow.c >> index 06ba036..dc6f4b8 100644 >> --- a/lib/flow.c >> +++ b/lib/flow.c >> @@ -1680,7 +1680,8 @@ miniflow_hash(const struct miniflow *flow, uint32_t >> basis) >> hash = mhash_add(hash, hash_map); >> hash = mhash_add(hash, hash_map >> 32); >> >> - return mhash_finish(hash, p - flow->values); >> + return mhash_finish(hash, >> + sizeof hash_map + count_1bits(hash_map) * sizeof >> *p); >> } >> >> cheers, >> kmindg >> _______________________________________________ >> dev mailing list >> dev@openvswitch.org >> http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev