| 1 | --- linux/VBoxNetFlt-linux.c (revision 62554)
|
|---|
| 2 | +++ linux/VBoxNetFlt-linux.c (revision 62555)
|
|---|
| 3 | @@ -1102,7 +1102,10 @@
|
|---|
| 4 | pShInfo->gso_size = pSG->GsoCtx.cbMaxSeg;
|
|---|
| 5 | pShInfo->gso_segs = PDMNetGsoCalcSegmentCount(&pSG->GsoCtx, pSG->cbTotal);
|
|---|
| 6 |
|
|---|
| 7 | - if (fDstWire)
|
|---|
| 8 | + /*
|
|---|
| 9 | + * We need to set checksum fields even if the packet goes to the host
|
|---|
| 10 | + * directly as it may be immediately forwared by IP layer.
|
|---|
| 11 | + */
|
|---|
| 12 | {
|
|---|
| 13 | Assert(skb_headlen(pPkt) >= pSG->GsoCtx.cbHdrs);
|
|---|
| 14 | pPkt->ip_summed = CHECKSUM_PARTIAL;
|
|---|
| 15 | @@ -1120,12 +1123,8 @@
|
|---|
| 16 | pPkt->csum = RT_OFFSETOF(RTNETUDP, uh_sum);
|
|---|
| 17 | # endif
|
|---|
| 18 | }
|
|---|
| 19 | - else
|
|---|
| 20 | - {
|
|---|
| 21 | - pPkt->ip_summed = CHECKSUM_UNNECESSARY;
|
|---|
| 22 | - pPkt->csum = 0;
|
|---|
| 23 | + if (!fDstWire)
|
|---|
| 24 | PDMNetGsoPrepForDirectUse(&pSG->GsoCtx, pPkt->data, pSG->cbTotal, false /*fPayloadChecksum*/);
|
|---|
| 25 | - }
|
|---|
| 26 | }
|
|---|
| 27 | #endif /* VBOXNETFLT_WITH_GSO_XMIT_WIRE || VBOXNETFLT_WITH_GSO_XMIT_HOST */
|
|---|
| 28 |
|
|---|