Hyper-V: hn: Store host hash value in flowid

When rx packet contains hash value sent from host, store it in
the mbuf's flowid field so when the same mbuf is on the tx path,
the hash value can be used by the host to determine the outgoing
network queue.

MFC after:	2 weeks
Sponsored by:	Microsoft
This commit is contained in:
Wei Hu 2021-02-24 05:07:46 +00:00
parent ff6a7e4ba6
commit 80f39bd95f

View File

@ -3077,13 +3077,24 @@ hn_encap(struct ifnet *ifp, struct hn_tx_ring *txr, struct hn_txdesc *txd,
if (txr->hn_tx_flags & HN_TX_FLAG_HASHVAL) {
/*
* Set the hash value for this packet, so that the host could
* dispatch the TX done event for this packet back to this TX
* ring's channel.
* Set the hash value for this packet.
*/
pi_data = hn_rndis_pktinfo_append(pkt, HN_RNDIS_PKT_LEN,
HN_NDIS_HASH_VALUE_SIZE, HN_NDIS_PKTINFO_TYPE_HASHVAL);
*pi_data = txr->hn_tx_idx;
if (M_HASHTYPE_ISHASH(m_head))
/*
* The flowid field contains the hash value host
* set in the rx queue if it is a ip forwarding pkt.
* Set the same hash value so host can send on the
* cpu it was received.
*/
*pi_data = m_head->m_pkthdr.flowid;
else
/*
* Otherwise just put the tx queue index.
*/
*pi_data = txr->hn_tx_idx;
}
if (m_head->m_flags & M_VLANTAG) {