Module Name: src Committed By: rmind Date: Fri Nov 22 01:24:21 UTC 2013
Modified Files: src/sys/net/npf: npf_impl.h npf_inet.c npf_session.c Log Message: npf_addr_mix: use xor rather than sum. To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 src/sys/net/npf/npf_impl.h cvs rdiff -u -r1.25 -r1.26 src/sys/net/npf/npf_inet.c cvs rdiff -u -r1.27 -r1.28 src/sys/net/npf/npf_session.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/npf/npf_impl.h diff -u src/sys/net/npf/npf_impl.h:1.41 src/sys/net/npf/npf_impl.h:1.42 --- src/sys/net/npf/npf_impl.h:1.41 Fri Nov 22 00:25:51 2013 +++ src/sys/net/npf/npf_impl.h Fri Nov 22 01:24:21 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: npf_impl.h,v 1.41 2013/11/22 00:25:51 rmind Exp $ */ +/* $NetBSD: npf_impl.h,v 1.42 2013/11/22 01:24:21 rmind Exp $ */ /*- * Copyright (c) 2009-2013 The NetBSD Foundation, Inc. @@ -193,7 +193,7 @@ uint16_t npf_fixup16_cksum(uint16_t, uin uint16_t npf_fixup32_cksum(uint16_t, uint32_t, uint32_t); uint16_t npf_addr_cksum(uint16_t, int, const npf_addr_t *, const npf_addr_t *); -uint32_t npf_addr_sum(const int, const npf_addr_t *, const npf_addr_t *); +uint32_t npf_addr_mix(const int, const npf_addr_t *, const npf_addr_t *); int npf_addr_cmp(const npf_addr_t *, const npf_netmask_t, const npf_addr_t *, const npf_netmask_t, const int); void npf_addr_mask(const npf_addr_t *, const npf_netmask_t, Index: src/sys/net/npf/npf_inet.c diff -u src/sys/net/npf/npf_inet.c:1.25 src/sys/net/npf/npf_inet.c:1.26 --- src/sys/net/npf/npf_inet.c:1.25 Wed Oct 30 08:41:38 2013 +++ src/sys/net/npf/npf_inet.c Fri Nov 22 01:24:21 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: npf_inet.c,v 1.25 2013/10/30 08:41:38 mrg Exp $ */ +/* $NetBSD: npf_inet.c,v 1.26 2013/11/22 01:24:21 rmind Exp $ */ /*- * Copyright (c) 2009-2012 The NetBSD Foundation, Inc. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: npf_inet.c,v 1.25 2013/10/30 08:41:38 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: npf_inet.c,v 1.26 2013/11/22 01:24:21 rmind Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -109,20 +109,19 @@ npf_addr_cksum(uint16_t cksum, int sz, c } /* - * npf_addr_sum: provide IP address as a summed (if needed) 32-bit integer. + * npf_addr_sum: provide IP addresses as a XORed 32-bit integer. * Note: used for hash function. */ uint32_t -npf_addr_sum(const int sz, const npf_addr_t *a1, const npf_addr_t *a2) +npf_addr_mix(const int sz, const npf_addr_t *a1, const npf_addr_t *a2) { uint32_t mix = 0; - int i; KASSERT(sz > 0 && a1 != NULL && a2 != NULL); - for (i = 0; i < (sz >> 2); i++) { - mix += a1->s6_addr32[i]; - mix += a2->s6_addr32[i]; + for (int i = 0; i < (sz >> 2); i++) { + mix ^= a1->s6_addr32[i]; + mix ^= a2->s6_addr32[i]; } return mix; } Index: src/sys/net/npf/npf_session.c diff -u src/sys/net/npf/npf_session.c:1.27 src/sys/net/npf/npf_session.c:1.28 --- src/sys/net/npf/npf_session.c:1.27 Fri Nov 8 00:38:26 2013 +++ src/sys/net/npf/npf_session.c Fri Nov 22 01:24:21 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: npf_session.c,v 1.27 2013/11/08 00:38:26 rmind Exp $ */ +/* $NetBSD: npf_session.c,v 1.28 2013/11/22 01:24:21 rmind Exp $ */ /*- * Copyright (c) 2010-2013 The NetBSD Foundation, Inc. @@ -92,7 +92,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: npf_session.c,v 1.27 2013/11/08 00:38:26 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: npf_session.c,v 1.28 2013/11/22 01:24:21 rmind Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -314,7 +314,7 @@ sess_hash_bucket(npf_sehash_t *stbl, con mix[0] = (scid->proto ^ scid->ifid) << 16; mix[0] |= sen->se_src_id ^ sen->se_dst_id; - mix[1] = npf_addr_sum(sz, &sen->se_src_addr, &sen->se_dst_addr); + mix[1] = npf_addr_mix(sz, &sen->se_src_addr, &sen->se_dst_addr); hash = murmurhash2(mix, sizeof(mix), sess_hash_seed); return &stbl[hash & SESS_HASH_MASK];