pull request (net-next): ipsec-next 2018-10-18
Subsystems (3)
Steffen Klassert
maintainer1) Remove an unnecessary dev->tstats check in xfrmi_get_stats64. From Li RongQing.
2) We currently do a sizeof(element) instead of a sizeof(array) check when initializing the ovec array of the secpath. Currently this array can have only one element, so code is OK but error-prone. Change this to do a sizeof(array) check so that we can add more elements in future. From Li RongQing.
3) Improve xfrm IPv6 address hashing by using the complete IPv6 addresses for a hash. From Michal Kubecek.
Please pull or let me know if there are problems.
Thanks!
The following changes since commit abf1a08ff3237a27188ff8cc2904f2cea893af55:
net: vhost: remove bad code line (2018-10-07 21:31:32 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git master
for you to fetch changes up to 8d4b6bce2559755cf2db6513a267fccdfbf7c3ab:
xfrm: use complete IPv6 addresses for hash (2018-10-15 10:09:18 +0200)
----------------------------------------------------------------
Li RongQing (2):
xfrm: remove unnecessary check in xfrmi_get_stats64
xfrm: use correct size to initialise sp->ovec
Michal Kubecek (1):
xfrm: use complete IPv6 addresses for hash
net/xfrm/xfrm_hash.h | 5 ++--- net/xfrm/xfrm_input.c | 2 +- net/xfrm/xfrm_interface.c | 3 --- 3 files changed, 3 insertions(+), 7 deletions(-)
Steffen Klassert
maintainerPATCH 1/3 xfrm: remove unnecessary check in xfrmi_get_stats64
From: Li RongQing <[email protected]>
if tstats of a device is not allocated, this device is not registered correctly and can not be used.
--- net/xfrm/xfrm_interface.c | 3 --- 1 file changed, 3 deletions(-)
net/xfrm/xfrm_interface.c +0 -3
@@ -561,9 +561,6 @@ static void xfrmi_get_stats64(struct net_device *dev, {int cpu; -if (!dev->tstats) -return ; -for_each_possible_cpu (cpu) {struct pcpu_sw_netstats *stats;struct pcpu_sw_netstats tmp;
Signature · 1 line
2.17.1
Steffen Klassert
maintainerPATCH 2/3 xfrm: use correct size to initialise sp->ovec
In reply to Steffen KlassertFrom: Li RongQing <[email protected]>
This place should want to initialize array, not a element, so it should be sizeof(array) instead of sizeof(element)
but now this array only has one element, so no error in this condition that XFRM_MAX_OFFLOAD_DEPTH is 1
--- net/xfrm/xfrm_input.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/xfrm/xfrm_input.c +1 -1
@@ -131,7 +131,7 @@ struct sec_path *secpath_dup(struct sec_path *src) sp->len =0 ; sp->olen =0 ; -memset (sp->ovec,0 ,sizeof (sp->ovec[XFRM_MAX_OFFLOAD_DEPTH ])); +memset (sp->ovec,0 ,sizeof (sp->ovec));if (src) {int i;
Signature · 1 line
2.17.1
Steffen Klassert
maintainerPATCH 3/3 xfrm: use complete IPv6 addresses for hash
In reply to Steffen KlassertFrom: Michal Kubecek <[email protected]>
In some environments it is common that many hosts share the same lower half of their IPv6 addresses (in particular ::1). As __xfrm6_addr_hash() and __xfrm6_daddr_saddr_hash() calculate the hash only from the lower halves, as much as 1/3 of the hosts ends up in one hashtable chain which harms the performance.
Use complete IPv6 addresses when calculating the hashes. Rather than just adding two more words to the xor, use jhash2() for consistency with __xfrm6_pref_hash() and __xfrm6_dpref_spref_hash().
--- net/xfrm/xfrm_hash.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
net/xfrm/xfrm_hash.h +2 -3
@@ -13,7 +13,7 @@ static inline unsigned int __xfrm4_addr_hash(const xfrm_address_t *addr)static inline unsigned int __xfrm6_addr_hash (const xfrm_address_t *addr) { -return ntohl (addr->a6[2 ] ^ addr->a6[3 ]); +return jhash2 ((__force u32 *)addr->a6,4 ,0 ); } static inline unsigned int __xfrm4_daddr_saddr_hash(const xfrm_address_t *daddr,
@@ -26,8 +26,7 @@ static inline unsigned int __xfrm4_daddr_saddr_hash(const xfrm_address_t *daddr,static inline unsigned int __xfrm6_daddr_saddr_hash (const xfrm_address_t *daddr,const xfrm_address_t *saddr) { -return ntohl (daddr->a6[2 ] ^ daddr->a6[3 ] ^ - saddr->a6[2 ] ^ saddr->a6[3 ]); +return __xfrm6_addr_hash (daddr) ^__xfrm6_addr_hash (saddr); }static inline u32 __bits2mask32 (__u8 bits)
Signature · 1 line
2.17.1
David Miller
maintainerFrom: Steffen Klassert <[email protected]>
Date: Thu, 18 Oct 2018 12:56:51 +0200
Quoted 10 lines
1) Remove an unnecessary
dev->tstatscheck inxfrmi_get_stats64. From Li RongQing.2) We currently do a sizeof(element) instead of a sizeof(array) check when initializing the ovec array of the secpath. Currently this array can have only one element, so code is OK but error-prone. Change this to do a sizeof(array) check so that we can add more elements in future. From Li RongQing.
Quoted 4 lines
3) Improve xfrm IPv6 address hashing by using the complete IPv6 addresses for a hash. From Michal Kubecek.
Please pull or let me know if there are problems.
Also pulled, thank you.