xen/netfront: fix inbound packet flags for checksum offload

Currently netfront is setting the flags of inbound packets with the checksum
not present (offloaded) to (CSUM_IP_CHECKED | CSUM_IP_VALID | CSUM_DATA_VALID |
CSUM_PSEUDO_HDR). According to the mbuf(9) man page this is not the correct
combination of flags, it should instead be (CSUM_DATA_VALID |
CSUM_PSEUDO_HDR).

Reviewed by:		Wei Liu <wei.liu2@citrix.com>
MFC after:		2 weeks
Sponsored by:		Citrix Systems R&D
Differential revision:	https://reviews.freebsd.org/D9831
This commit is contained in:
Roger Pau Monné 2017-03-07 09:18:52 +00:00
parent 41716b8d51
commit a81683c371

View File

@ -1192,15 +1192,17 @@ xn_rxeof(struct netfront_rxq *rxq)
m->m_pkthdr.rcvif = ifp;
if ( rx->flags & NETRXF_data_validated ) {
/* Tell the stack the checksums are okay */
/*
* XXX this isn't necessarily the case - need to add
* check
* According to mbuf(9) the correct way to tell
* the stack that the checksum of an inbound
* packet is correct, without it actually being
* present (because the underlying interface
* doesn't provide it), is to set the
* CSUM_DATA_VALID and CSUM_PSEUDO_HDR flags,
* and the csum_data field to 0xffff.
*/
m->m_pkthdr.csum_flags |=
(CSUM_IP_CHECKED | CSUM_IP_VALID | CSUM_DATA_VALID
| CSUM_PSEUDO_HDR);
m->m_pkthdr.csum_flags |= (CSUM_DATA_VALID
| CSUM_PSEUDO_HDR);
m->m_pkthdr.csum_data = 0xffff;
}
if ((rx->flags & NETRXF_extra_info) != 0 &&