Changeset 38549 in vbox for trunk/src/VBox/Devices
- Timestamp:
- Aug 26, 2011 1:26:07 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 73704
- Location:
- trunk/src/VBox/Devices/Network
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DevE1000.cpp
r37644 r38549 2943 2943 { 2944 2944 if (pCtx->dw2.fTCP) 2945 { 2945 2946 pGso->u8Type = PDMNETWORKGSOTYPE_IPV4_TCP; 2947 pGso->cbHdrsSeg = pCtx->dw3.u8HDRLEN; 2948 } 2946 2949 else 2950 { 2947 2951 pGso->u8Type = PDMNETWORKGSOTYPE_IPV4_UDP; 2952 pGso->cbHdrsSeg = pCtx->tu.u8CSS; /* IP header only */ 2953 } 2948 2954 /** @todo Detect IPv4-IPv6 tunneling (need test setup since linux doesn't do 2949 2955 * this yet it seems)... */ … … 2951 2957 else 2952 2958 { 2959 pGso->cbHdrsSeg = pCtx->dw3.u8HDRLEN; /* @todo IPv6 UFO */ 2953 2960 if (pCtx->dw2.fTCP) 2954 2961 pGso->u8Type = PDMNETWORKGSOTYPE_IPV6_TCP; … … 2958 2965 pGso->offHdr1 = pCtx->ip.u8CSS; 2959 2966 pGso->offHdr2 = pCtx->tu.u8CSS; 2960 pGso->cbHdrs 2967 pGso->cbHdrsTotal = pCtx->dw3.u8HDRLEN; 2961 2968 pGso->cbMaxSeg = pCtx->dw3.u16MSS; 2962 2969 Assert(PDMNetGsoIsValid(pGso, sizeof(*pGso), pGso->cbMaxSeg * 5)); 2963 E1kLog2(("e1kSetupGsoCtx: mss=%#x hdr=%#x hdr 1=%#x hdr2=%#x %s\n",2964 pGso->cbMaxSeg, pGso->cbHdrs , pGso->offHdr1, pGso->offHdr2, PDMNetGsoTypeName((PDMNETWORKGSOTYPE)pGso->u8Type) ));2970 E1kLog2(("e1kSetupGsoCtx: mss=%#x hdr=%#x hdrseg=%#x hdr1=%#x hdr2=%#x %s\n", 2971 pGso->cbMaxSeg, pGso->cbHdrsTotal, pGso->cbHdrsSeg, pGso->offHdr1, pGso->offHdr2, PDMNetGsoTypeName((PDMNETWORKGSOTYPE)pGso->u8Type) )); 2965 2972 } 2966 2973 -
trunk/src/VBox/Devices/Network/DevVirtioNet.cpp
r37324 r38549 725 725 if (pGso) 726 726 { 727 Log2(("%s vnetHandleRxPacket: gso type=%x cbHdr =%u mss=%u"727 Log2(("%s vnetHandleRxPacket: gso type=%x cbHdrsTotal=%u cbHdrsSeg=%u mss=%u" 728 728 " off1=0x%x off2=0x%x\n", INSTANCE(pState), pGso->u8Type, 729 pGso->cbHdrs , pGso->cbMaxSeg, pGso->offHdr1, pGso->offHdr2));729 pGso->cbHdrsTotal, pGso->cbHdrsSeg, pGso->cbMaxSeg, pGso->offHdr1, pGso->offHdr2)); 730 730 Hdr.Hdr.u8Flags = VNETHDR_F_NEEDS_CSUM; 731 731 switch (pGso->u8Type) … … 746 746 return VERR_INVALID_PARAMETER; 747 747 } 748 Hdr.Hdr.u16HdrLen = pGso->cbHdrs ;748 Hdr.Hdr.u16HdrLen = pGso->cbHdrsTotal; 749 749 Hdr.Hdr.u16GSOSize = pGso->cbMaxSeg; 750 750 Hdr.Hdr.u16CSumStart = pGso->offHdr2; … … 981 981 case VNETHDR_GSO_TCPV4: 982 982 pGso->u8Type = PDMNETWORKGSOTYPE_IPV4_TCP; 983 pGso->cbHdrsSeg = pHdr->u16HdrLen; 983 984 break; 984 985 case VNETHDR_GSO_TCPV6: 985 986 pGso->u8Type = PDMNETWORKGSOTYPE_IPV6_TCP; 987 pGso->cbHdrsSeg = pHdr->u16HdrLen; 986 988 break; 987 989 case VNETHDR_GSO_UDP: 988 990 pGso->u8Type = PDMNETWORKGSOTYPE_IPV4_UDP; 991 pGso->cbHdrsSeg = pHdr->u16CSumStart; 989 992 break; 990 993 default: … … 998 1001 return NULL; 999 1002 } 1000 pGso->offHdr1 = sizeof(RTNETETHERHDR);1001 pGso->cbHdrs 1002 pGso->cbMaxSeg = pHdr->u16GSOSize;1003 pGso->offHdr1 = sizeof(RTNETETHERHDR); 1004 pGso->cbHdrsTotal = pHdr->u16HdrLen; 1005 pGso->cbMaxSeg = pHdr->u16GSOSize; 1003 1006 return pGso; 1004 1007 } … … 1123 1126 { 1124 1127 Log4(("%s vnetTransmitPendingPackets: HdrLen before adjustment %d.\n", 1125 INSTANCE(pState), pGso->cbHdrs ));1128 INSTANCE(pState), pGso->cbHdrsTotal)); 1126 1129 switch (pGso->u8Type) 1127 1130 { 1128 1131 case PDMNETWORKGSOTYPE_IPV4_TCP: 1129 1132 case PDMNETWORKGSOTYPE_IPV6_TCP: 1130 pGso->cbHdrs = Hdr.u16CSumStart +1133 pGso->cbHdrsTotal = Hdr.u16CSumStart + 1131 1134 ((PRTNETTCP)(((uint8_t*)pSgBuf->aSegs[0].pvSeg) + Hdr.u16CSumStart))->th_off * 4; 1132 1135 break; 1133 1136 case PDMNETWORKGSOTYPE_IPV4_UDP: 1134 pGso->cbHdrs = Hdr.u16CSumStart + sizeof(RTNETUDP);1137 pGso->cbHdrsTotal = Hdr.u16CSumStart + sizeof(RTNETUDP); 1135 1138 break; 1136 1139 } 1137 1140 /* Update GSO structure embedded into the frame */ 1138 ((PPDMNETWORKGSO)pSgBuf->pvUser)->cbHdrs = pGso->cbHdrs;1141 ((PPDMNETWORKGSO)pSgBuf->pvUser)->cbHdrsTotal = pGso->cbHdrsTotal; 1139 1142 Log4(("%s vnetTransmitPendingPackets: adjusted HdrLen to %d.\n", 1140 INSTANCE(pState), pGso->cbHdrs ));1143 INSTANCE(pState), pGso->cbHdrsTotal)); 1141 1144 } 1142 Log2(("%s vnetTransmitPendingPackets: gso type=%x cbHdr =%u mss=%u"1145 Log2(("%s vnetTransmitPendingPackets: gso type=%x cbHdrsTotal=%u cbHdrsSeg=%u mss=%u" 1143 1146 " off1=0x%x off2=0x%x\n", INSTANCE(pState), pGso->u8Type, 1144 pGso->cbHdrs , pGso->cbMaxSeg, pGso->offHdr1, pGso->offHdr2));1147 pGso->cbHdrsTotal, pGso->cbHdrsSeg, pGso->cbMaxSeg, pGso->offHdr1, pGso->offHdr2)); 1145 1148 STAM_REL_COUNTER_INC(&pState->StatTransmitGSO); 1146 1149 } -
trunk/src/VBox/Devices/Network/DrvIntNet.cpp
r37979 r38549 769 769 cbFrame, u64Now, u64Now - pThis->u64LastReceiveTS, u64Now - pThis->u64LastTransferTS, cSegs)); 770 770 pThis->u64LastReceiveTS = u64Now; 771 Log2(("drvR3IntNetRecvRun: cbFrame=%#x type=%d cbHdrs =%#x Hdr1=%#x Hdr2=%#x MMS=%#x\n"771 Log2(("drvR3IntNetRecvRun: cbFrame=%#x type=%d cbHdrsTotal=%#x cbHdrsSeg=%#x Hdr1=%#x Hdr2=%#x MMS=%#x\n" 772 772 "%.*Rhxd\n", 773 cbFrame, pGso->u8Type, pGso->cbHdrs , pGso->offHdr1, pGso->offHdr2, pGso->cbMaxSeg,773 cbFrame, pGso->u8Type, pGso->cbHdrsTotal, pGso->cbHdrsSeg, pGso->offHdr1, pGso->offHdr2, pGso->cbMaxSeg, 774 774 cbFrame - sizeof(*pGso), pGso + 1)); 775 775 } … … 793 793 else 794 794 { 795 AssertMsgFailed(("cbFrame=%#x type=%d cbHdrs =%#x Hdr1=%#x Hdr2=%#x MMS=%#x\n",796 cbFrame, pGso->u8Type, pGso->cbHdrs , pGso->offHdr1, pGso->offHdr2, pGso->cbMaxSeg));795 AssertMsgFailed(("cbFrame=%#x type=%d cbHdrsTotal=%#x cbHdrsSeg=%#x Hdr1=%#x Hdr2=%#x MMS=%#x\n", 796 cbFrame, pGso->u8Type, pGso->cbHdrsTotal, pGso->cbHdrsSeg, pGso->offHdr1, pGso->offHdr2, pGso->cbMaxSeg)); 797 797 STAM_REL_COUNTER_INC(&pBuf->cStatBadFrames); 798 798 } -
trunk/src/VBox/Devices/Network/DrvNAT.cpp
r38111 r38549 401 401 size_t cbSeg; 402 402 void *pvSeg; 403 m = slirp_ext_m_get(pThis->pNATState, pGso->cbHdrs + pGso->cbMaxSeg, &pvSeg, &cbSeg);403 m = slirp_ext_m_get(pThis->pNATState, pGso->cbHdrsTotal + pGso->cbMaxSeg, &pvSeg, &cbSeg); 404 404 if (!m) 405 405 break; 406 406 407 407 #if 1 408 uint32_t cbPayload ;408 uint32_t cbPayload, cbHdrs; 409 409 uint32_t offPayload = PDMNetGsoCarveSegment(pGso, pbFrame, pSgBuf->cbUsed, 410 iSeg, cSegs, (uint8_t *)pvSeg, &cb Payload);411 memcpy((uint8_t *)pvSeg + pGso->cbHdrs, pbFrame + offPayload, cbPayload);412 413 slirp_input(pThis->pNATState, m, cbPayload + pGso->cbHdrs);410 iSeg, cSegs, (uint8_t *)pvSeg, &cbHdrs, &cbPayload); 411 memcpy((uint8_t *)pvSeg + cbHdrs, pbFrame + offPayload, cbPayload); 412 413 slirp_input(pThis->pNATState, m, cbPayload + cbHdrs); 414 414 #else 415 415 uint32_t cbSegFrame; -
trunk/src/VBox/Devices/Network/Pcap.cpp
r37369 r38549 157 157 for (uint32_t iSeg = 0; iSeg < cSegs; iSeg++) 158 158 { 159 uint32_t cbSegPayload ;160 uint32_t offSegPayload = PDMNetGsoCarveSegment(pGso, pbFrame, cbFrame, iSeg, cSegs, abHdrs, &cb SegPayload);161 162 pcapUpdateHeader(&Hdr, pGso->cbHdrs + cbSegPayload, cbSegMax);159 uint32_t cbSegPayload, cbHdrs; 160 uint32_t offSegPayload = PDMNetGsoCarveSegment(pGso, pbFrame, cbFrame, iSeg, cSegs, abHdrs, &cbHdrs, &cbSegPayload); 161 162 pcapUpdateHeader(&Hdr, cbHdrs + cbSegPayload, cbSegMax); 163 163 int rc = RTStrmWrite(pStream, &Hdr, sizeof(Hdr)); 164 164 if (RT_FAILURE(rc)) 165 165 return rc; 166 166 167 rc = RTStrmWrite(pStream, abHdrs, RT_MIN(Hdr.incl_len, pGso->cbHdrs));168 if (RT_SUCCESS(rc) && Hdr.incl_len > pGso->cbHdrs)169 rc = RTStrmWrite(pStream, pbFrame + offSegPayload, Hdr.incl_len - pGso->cbHdrs);167 rc = RTStrmWrite(pStream, abHdrs, RT_MIN(Hdr.incl_len, cbHdrs)); 168 if (RT_SUCCESS(rc) && Hdr.incl_len > cbHdrs) 169 rc = RTStrmWrite(pStream, pbFrame + offSegPayload, Hdr.incl_len - cbHdrs); 170 170 if (RT_FAILURE(rc)) 171 171 return rc; … … 237 237 for (uint32_t iSeg = 0; iSeg < cSegs; iSeg++) 238 238 { 239 uint32_t cbSegPayload ;240 uint32_t offSegPayload = PDMNetGsoCarveSegment(pGso, pbFrame, cbFrame, iSeg, cSegs, abHdrs, &cb SegPayload);241 242 pcapUpdateHeader(&Hdr, pGso->cbHdrs + cbSegPayload, cbSegMax);239 uint32_t cbSegPayload, cbHdrs; 240 uint32_t offSegPayload = PDMNetGsoCarveSegment(pGso, pbFrame, cbFrame, iSeg, cSegs, abHdrs, &cbHdrs, &cbSegPayload); 241 242 pcapUpdateHeader(&Hdr, cbHdrs + cbSegPayload, cbSegMax); 243 243 int rc = RTFileWrite(File, &Hdr, sizeof(Hdr), NULL); 244 244 if (RT_FAILURE(rc)) 245 245 return rc; 246 246 247 rc = RTFileWrite(File, abHdrs, RT_MIN(Hdr.incl_len, pGso->cbHdrs), NULL);248 if (RT_SUCCESS(rc) && Hdr.incl_len > pGso->cbHdrs)249 rc = RTFileWrite(File, pbFrame + offSegPayload, Hdr.incl_len - pGso->cbHdrs, NULL);247 rc = RTFileWrite(File, abHdrs, RT_MIN(Hdr.incl_len, cbHdrs), NULL); 248 if (RT_SUCCESS(rc) && Hdr.incl_len > cbHdrs) 249 rc = RTFileWrite(File, pbFrame + offSegPayload, Hdr.incl_len - cbHdrs, NULL); 250 250 if (RT_FAILURE(rc)) 251 251 return rc; -
trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp
r37979 r38549 2663 2663 for (uint32_t iSeg = 0; iSeg < cSegs; iSeg++) 2664 2664 { 2665 uint32_t cbSegPayload ;2665 uint32_t cbSegPayload, cbSegHdrs; 2666 2666 uint32_t offSegPayload = PDMNetGsoCarveSegment(&pSG->GsoCtx, (uint8_t *)pSG->aSegs[0].pv, pSG->cbTotal, iSeg, cSegs, 2667 pIfSender->abGsoHdrs, &cbSeg Payload);2668 2669 IntNetSgInitTempSegs(&u.SG, pSG->GsoCtx.cbHdrs + cbSegPayload, 2, 2);2667 pIfSender->abGsoHdrs, &cbSegHdrs, &cbSegPayload); 2668 2669 IntNetSgInitTempSegs(&u.SG, cbSegHdrs + cbSegPayload, 2, 2); 2670 2670 u.SG.aSegs[0].Phys = NIL_RTHCPHYS; 2671 2671 u.SG.aSegs[0].pv = pIfSender->abGsoHdrs; 2672 u.SG.aSegs[0].cb = pSG->GsoCtx.cbHdrs;2672 u.SG.aSegs[0].cb = cbSegHdrs; 2673 2673 u.SG.aSegs[1].Phys = NIL_RTHCPHYS; 2674 2674 u.SG.aSegs[1].pv = (uint8_t *)pSG->aSegs[0].pv + offSegPayload;
Note:
See TracChangeset
for help on using the changeset viewer.