VirtualBox

Changeset 34088 in vbox


Ignore:
Timestamp:
Nov 15, 2010 8:35:22 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
67779
Message:

virtio-net: workaround for guests excluding L4 header length in GSO structure.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/DevVirtioNet.cpp

    r33595 r34088  
    11141114                    //vnetPacketDump(pState, (uint8_t*)pSgBuf->aSegs[0].pvSeg, uSize, "--> Outgoing");
    11151115                    if (pGso)
     1116                    {
     1117                        /* Some guests (RHEL) may report HdrLen excluding transport layer header! */
     1118                        if (pGso->cbHdrs < Hdr.u16CSumStart + Hdr.u16CSumOffset + 2)
     1119                        {
     1120                            Log4(("%s vnetTransmitPendingPackets: HdrLen before adjustment %d.\n", pGso->cbHdrs));
     1121                            switch (pGso->u8Type)
     1122                            {
     1123                                case PDMNETWORKGSOTYPE_IPV4_TCP:
     1124                                case PDMNETWORKGSOTYPE_IPV6_TCP:
     1125                                    pGso->cbHdrs = Hdr.u16CSumStart +
     1126                                        ((PRTNETTCP)(((uint8_t*)pSgBuf->aSegs[0].pvSeg) + Hdr.u16CSumStart))->th_off * 4;
     1127                                    break;
     1128                                case PDMNETWORKGSOTYPE_IPV4_UDP:
     1129                                    pGso->cbHdrs = Hdr.u16CSumStart + sizeof(RTNETUDP);
     1130                                    break;
     1131                            }
     1132                            /* Update GSO structure embedded into the frame */
     1133                            ((PPDMNETWORKGSO)pSgBuf->pvUser)->cbHdrs = pGso->cbHdrs;
     1134                            Log4(("%s vnetTransmitPendingPackets: adjusted HdrLen to %d.\n",
     1135                                  INSTANCE(pState), pGso->cbHdrs));
     1136                        }
     1137                        Log2(("%s vnetTransmitPendingPackets: gso type=%x cbHdr=%u mss=%u"
     1138                              " off1=0x%x off2=0x%x\n", INSTANCE(pState), pGso->u8Type,
     1139                              pGso->cbHdrs, pGso->cbMaxSeg, pGso->offHdr1, pGso->offHdr2));
    11161140                        STAM_REL_COUNTER_INC(&pState->StatTransmitGSO);
     1141                    }
    11171142                    else if (Hdr.u8Flags & VNETHDR_F_NEEDS_CSUM)
    11181143                    {
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette