From patchwork Thu Apr 27 13:45:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antoine Tenart X-Patchwork-Id: 13225500 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5127C77B73 for ; Thu, 27 Apr 2023 13:45:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243284AbjD0Npj (ORCPT ); Thu, 27 Apr 2023 09:45:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51882 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243389AbjD0Nph (ORCPT ); Thu, 27 Apr 2023 09:45:37 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 87C9F2709 for ; Thu, 27 Apr 2023 06:45:34 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 15E5561444 for ; Thu, 27 Apr 2023 13:45:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D126C433D2; Thu, 27 Apr 2023 13:45:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1682603133; bh=D8Vhv+XsJTd04zdSnRJn/vpNhr6R8F+gq2dhD0U+Z+k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uYUizYkGivNa1Wujjmt2wbMrLA0KuUndiJVFHyUJFC+v2YVYa34h2Ar0oAFwWvXIb Qy+ZUiJnOhAcPA0KbOQwtJfxghC96Qhvecp+TJbAQp3HiJ7Pexv73zgBv76zLq58G+ n8A22lmqxcuFp/YxuPFtooADcitVmVzLMolh16FaHpIm4VmpDQN8FOdxfJ26zlxaWF 2mya5JuOu+Un5X1bkve0oKVFpswT1F8kC6ZfKitRV1KtQGpGlet/SQUVKa+QGWtdox is2uhfBEPuLAVpOrjm32G4pgtLkYjlrFWOAP6TAkbs2J63ODouZ3QrpGrpxH+X1uu1 IkJ4WCRc/7v3Q== From: Antoine Tenart To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com Cc: Antoine Tenart , netdev@vger.kernel.org Subject: [PATCH net-next 1/4] net: tcp: make the txhash available in TIME_WAIT sockets for IPv4 too Date: Thu, 27 Apr 2023 15:45:24 +0200 Message-Id: <20230427134527.18127-2-atenart@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427134527.18127-1-atenart@kernel.org> References: <20230427134527.18127-1-atenart@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Commit c67b85558ff2 ("ipv6: tcp: send consistent autoflowlabel in TIME_WAIT state") made the socket txhash also available in TIME_WAIT sockets but for IPv6 only. Make it available for IPv4 too as we'll use it in later commits. Signed-off-by: Antoine Tenart --- net/ipv4/tcp_minisocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index dac0d62120e6..04fc328727e6 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c @@ -303,6 +303,7 @@ void tcp_time_wait(struct sock *sk, int state, int timeo) tcptw->tw_ts_offset = tp->tsoffset; tcptw->tw_last_oow_ack_time = 0; tcptw->tw_tx_delay = tp->tcp_tx_delay; + tw->tw_txhash = sk->sk_txhash; #if IS_ENABLED(CONFIG_IPV6) if (tw->tw_family == PF_INET6) { struct ipv6_pinfo *np = inet6_sk(sk); @@ -311,7 +312,6 @@ void tcp_time_wait(struct sock *sk, int state, int timeo) tw->tw_v6_rcv_saddr = sk->sk_v6_rcv_saddr; tw->tw_tclass = np->tclass; tw->tw_flowlabel = be32_to_cpu(np->flow_label & IPV6_FLOWLABEL_MASK); - tw->tw_txhash = sk->sk_txhash; tw->tw_ipv6only = sk->sk_ipv6only; } #endif From patchwork Thu Apr 27 13:45:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antoine Tenart X-Patchwork-Id: 13225501 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 57D29C77B61 for ; Thu, 27 Apr 2023 13:45:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243563AbjD0Npt (ORCPT ); Thu, 27 Apr 2023 09:45:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52084 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243632AbjD0Npr (ORCPT ); Thu, 27 Apr 2023 09:45:47 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D93046BE for ; Thu, 27 Apr 2023 06:45:37 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E825963AF3 for ; Thu, 27 Apr 2023 13:45:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 09E12C433EF; Thu, 27 Apr 2023 13:45:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1682603136; bh=5LnV+4V+kW36pEYNJSHv33xikOcQ0aoo9d7P6dCzLBw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Hy1NYPzMTHlrsDlwTvfAd3BEFkzZBmIMJqHxMpeAIjEEkmlc+CEAnqDyyVpjoXpVk aaOBGvnuV4Xim6CypGLx2PrhI72xuW7RPQJBjKa63AzN1jF9FR467D2ij0ePeHcK2m NiMEnR4idp5R4eR6aBhyXHaU3caaRpwlQFx6y7DQI5Pwt/Xhx7YXUSZb0gsd62C+Dx MZhWICGBja0bp+3HzvC+Av9uWI4oj5DVA1alYyjNC6NkCa6XuHVtHBtW2pf7EcBzRm uz3qLuM+HmKLTgMmMh0pn43VWFfewmAynaNO7hRjDSKkw4TT5t/REgfy23RjyfFhWa 376Nst2vObZyw== From: Antoine Tenart To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com Cc: Antoine Tenart , netdev@vger.kernel.org Subject: [PATCH net-next 2/4] net: ipv4: use consistent txhash in TIME_WAIT and SYN_RECV Date: Thu, 27 Apr 2023 15:45:25 +0200 Message-Id: <20230427134527.18127-3-atenart@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427134527.18127-1-atenart@kernel.org> References: <20230427134527.18127-1-atenart@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org When using IPv4/TCP, skb->hash comes from sk->sk_txhash except in TIME_WAIT and SYN_RECV where it's not set in the reply skb from ip_send_unicast_reply. Those packets will have a mismatched hash with others from the same flow as their hashes will be 0. IPv6 does not have the same issue as the hash is set from the socket txhash in those cases. This commits sets the hash in the reply skb from ip_send_unicast_reply, which makes the IPv4 code behaving like IPv6. Signed-off-by: Antoine Tenart --- include/net/ip.h | 2 +- net/ipv4/ip_output.c | 4 +++- net/ipv4/tcp_ipv4.c | 14 +++++++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/include/net/ip.h b/include/net/ip.h index c3fffaa92d6e..749735171e2c 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -280,7 +280,7 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, const struct ip_options *sopt, __be32 daddr, __be32 saddr, const struct ip_reply_arg *arg, - unsigned int len, u64 transmit_time); + unsigned int len, u64 transmit_time, u32 txhash); #define IP_INC_STATS(net, field) SNMP_INC_STATS64((net)->mib.ip_statistics, field) #define __IP_INC_STATS(net, field) __SNMP_INC_STATS64((net)->mib.ip_statistics, field) diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 22a90a9392eb..268d8d6f4d8e 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -1682,7 +1682,7 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, const struct ip_options *sopt, __be32 daddr, __be32 saddr, const struct ip_reply_arg *arg, - unsigned int len, u64 transmit_time) + unsigned int len, u64 transmit_time, u32 txhash) { struct ip_options_data replyopts; struct ipcm_cookie ipc; @@ -1745,6 +1745,8 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, arg->csum)); nskb->ip_summed = CHECKSUM_NONE; nskb->mono_delivery_time = !!transmit_time; + if (txhash) + skb_set_hash(nskb, txhash, PKT_HASH_TYPE_L4); ip_push_pending_frames(sk, &fl4); } out: diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 39bda2b1066e..8fd4b548d448 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -692,6 +692,7 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb) u64 transmit_time = 0; struct sock *ctl_sk; struct net *net; + u32 txhash = 0; /* Never send a reset in response to a reset. */ if (th->rst) @@ -829,12 +830,14 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb) inet_twsk(sk)->tw_priority : sk->sk_priority; transmit_time = tcp_transmit_time(sk); xfrm_sk_clone_policy(ctl_sk, sk); + txhash = (sk->sk_state == TCP_TIME_WAIT) ? + inet_twsk(sk)->tw_txhash : sk->sk_txhash; } ip_send_unicast_reply(ctl_sk, skb, &TCP_SKB_CB(skb)->header.h4.opt, ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, &arg, arg.iov[0].iov_len, - transmit_time); + transmit_time, txhash); ctl_sk->sk_mark = 0; xfrm_sk_free_policy(ctl_sk); @@ -857,7 +860,7 @@ static void tcp_v4_send_ack(const struct sock *sk, struct sk_buff *skb, u32 seq, u32 ack, u32 win, u32 tsval, u32 tsecr, int oif, struct tcp_md5sig_key *key, - int reply_flags, u8 tos) + int reply_flags, u8 tos, u32 txhash) { const struct tcphdr *th = tcp_hdr(skb); struct { @@ -933,7 +936,7 @@ static void tcp_v4_send_ack(const struct sock *sk, skb, &TCP_SKB_CB(skb)->header.h4.opt, ip_hdr(skb)->saddr, ip_hdr(skb)->daddr, &arg, arg.iov[0].iov_len, - transmit_time); + transmit_time, txhash); ctl_sk->sk_mark = 0; sock_net_set(ctl_sk, &init_net); @@ -954,7 +957,8 @@ static void tcp_v4_timewait_ack(struct sock *sk, struct sk_buff *skb) tw->tw_bound_dev_if, tcp_twsk_md5_key(tcptw), tw->tw_transparent ? IP_REPLY_ARG_NOSRCCHECK : 0, - tw->tw_tos + tw->tw_tos, + tw->tw_txhash ); inet_twsk_put(tw); @@ -987,7 +991,7 @@ static void tcp_v4_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb, 0, tcp_md5_do_lookup(sk, l3index, addr, AF_INET), inet_rsk(req)->no_srccheck ? IP_REPLY_ARG_NOSRCCHECK : 0, - ip_hdr(skb)->tos); + ip_hdr(skb)->tos, tcp_rsk(req)->txhash); } /* From patchwork Thu Apr 27 13:45:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antoine Tenart X-Patchwork-Id: 13225502 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4FE0C77B7C for ; Thu, 27 Apr 2023 13:45:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243632AbjD0Npv (ORCPT ); Thu, 27 Apr 2023 09:45:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52124 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243690AbjD0Nps (ORCPT ); Thu, 27 Apr 2023 09:45:48 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4DF454699 for ; Thu, 27 Apr 2023 06:45:40 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id C9545617C2 for ; Thu, 27 Apr 2023 13:45:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DD07CC433D2; Thu, 27 Apr 2023 13:45:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1682603139; bh=2pNv0Y1V6med9itiHIgMzKtaNpBgSChPkAiSDVob1K8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XSi9L/ZuGmpkMRat//FdBuCwoH1PL1gwN5OwzF4JnS72NPMekHP6oiE7I0Xvilijm HDBff6kDoryK0zikqE3t894xvNFZ3kiXMOh5rv/7LAl7rIDjnOHnqyMjM6iQx604YO Jlaug0endVQA37DBDEk+anNVRVRHlmOGF87H9zMQvSMnA3V3tLjBdJIiW6Uvoes4zK Xh7IXHliC4Fzeyc2iN+wDgV0riO1ALCOc/vrw5KRwn/JipFnHThoXO8XRdhNhVGel7 i7jlySxbD3cllMrOReiA4/hIIosvSMIY81vzF3IUbeCzIrf5+RuFOPbeU/TtoYn9AX Mu2iqCJRKJfBw== From: Antoine Tenart To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com Cc: Antoine Tenart , netdev@vger.kernel.org Subject: [PATCH net-next 3/4] Documentation: net: net.core.txrehash is not specific to listening sockets Date: Thu, 27 Apr 2023 15:45:26 +0200 Message-Id: <20230427134527.18127-4-atenart@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427134527.18127-1-atenart@kernel.org> References: <20230427134527.18127-1-atenart@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org The net.core.txrehash documentation mentions this knob is for listening sockets only, while sk_rethink_txhash can be called on SYN and RTO retransmits on all TCP sockets. Remove the listening socket part. Signed-off-by: Antoine Tenart --- Documentation/admin-guide/sysctl/net.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/admin-guide/sysctl/net.rst b/Documentation/admin-guide/sysctl/net.rst index 466c560b0c30..4877563241f3 100644 --- a/Documentation/admin-guide/sysctl/net.rst +++ b/Documentation/admin-guide/sysctl/net.rst @@ -386,8 +386,8 @@ Default : 0 (for compatibility reasons) txrehash -------- -Controls default hash rethink behaviour on listening socket when SO_TXREHASH -option is set to SOCK_TXREHASH_DEFAULT (i. e. not overridden by setsockopt). +Controls default hash rethink behaviour on socket when SO_TXREHASH option is set +to SOCK_TXREHASH_DEFAULT (i. e. not overridden by setsockopt). If set to 1 (default), hash rethink is performed on listening socket. If set to 0, hash rethink is not performed. From patchwork Thu Apr 27 13:45:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antoine Tenart X-Patchwork-Id: 13225503 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0DB24C77B73 for ; Thu, 27 Apr 2023 13:45:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243731AbjD0Npx (ORCPT ); Thu, 27 Apr 2023 09:45:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243708AbjD0Nps (ORCPT ); Thu, 27 Apr 2023 09:45:48 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60A2C4C18 for ; Thu, 27 Apr 2023 06:45:43 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id EE3876380D for ; Thu, 27 Apr 2023 13:45:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0D097C433D2; Thu, 27 Apr 2023 13:45:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1682603142; bh=IKw9u4/AevM6AVhGjUM+97AFlcGCbDH+7YZ5T4PEUxU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LEeZS4IJwlONzipz0Ow1/H8a0hpAJi3MgBOW5erf5MJEVs0nUOzEmM1LoIh65L/nC 4S6+BZ7yqPbO+hsvRLeVudaxdVbkV+dUkCY9jOz04mmsieSeUDSvsXO+svJl7P7w6a dOnZ0rDS4F7FheAxL0bdgnvxobIJGXd6gQX8uzV9IEmJ1gx53JsXPHSFJUQwWzPi8j U85JfddpKMex+8FyNqSmkpGnA1KmONge3Cl7c6f0g256nL+cla0rnM2ORMQYjbFUp5 ZLh1asJAcBAuYOaif8J3UxOb+rzU7fCvDe8gpo/blcOAQeQEtT4VLP+1D1zV/aaQkC 9TSiky/AbFORQ== From: Antoine Tenart To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com Cc: Antoine Tenart , netdev@vger.kernel.org Subject: [PATCH net-next 4/4] net: skbuff: fix l4_hash comment Date: Thu, 27 Apr 2023 15:45:27 +0200 Message-Id: <20230427134527.18127-5-atenart@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427134527.18127-1-atenart@kernel.org> References: <20230427134527.18127-1-atenart@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Since commit 877d1f6291f8 ("net: Set sk_txhash from a random number") sk->sk_txhash is not a canonical 4-tuple hash. sk->sk_txhash is used in the TCP Tx path to populate skb->hash, with skb->l4_hash=1. With this, skb->l4_hash does not always indicate the hash is a "canonical 4-tuple hash over transport ports" but rather a hash from L4 layer to provide a uniform distribution over flows. Reword the comment accordingly, to avoid misunderstandings. Signed-off-by: Antoine Tenart --- include/linux/skbuff.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 738776ab8838..f54c84193b23 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -791,8 +791,8 @@ typedef unsigned char *sk_buff_data_t; * @active_extensions: active extensions (skb_ext_id types) * @ndisc_nodetype: router type (from link layer) * @ooo_okay: allow the mapping of a socket to a queue to be changed - * @l4_hash: indicate hash is a canonical 4-tuple hash over transport - * ports. + * @l4_hash: indicate hash is from layer 4 and provides a uniform + * distribution over flows. * @sw_hash: indicates hash was computed in software stack * @wifi_acked_valid: wifi_acked was set * @wifi_acked: whether frame was acked on wifi or not