Changeset 66521 in vbox
- Timestamp:
- Apr 12, 2017 8:33:38 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114528
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DevVirtioNet.cpp
r64390 r66521 1149 1149 } 1150 1150 1151 DECLINLINE(void) vnetCompleteChecksum(uint8_t *pBuf, unsignedcbSize, uint16_t uStart, uint16_t uOffset)1151 DECLINLINE(void) vnetCompleteChecksum(uint8_t *pBuf, size_t cbSize, uint16_t uStart, uint16_t uOffset) 1152 1152 { 1153 1153 *(uint16_t*)(pBuf + uStart + uOffset) = vnetCSum16(pBuf + uStart, cbSize - uStart); … … 1212 1212 STAM_PROFILE_ADV_START(&pThis->StatTransmit, a); 1213 1213 /* Compute total frame size. */ 1214 for (unsigned int i = 1; i < elem.nOut ; i++)1214 for (unsigned int i = 1; i < elem.nOut && uSize < VNET_MAX_FRAME_SIZE; i++) 1215 1215 uSize += elem.aSegsOut[i].cb; 1216 1216 Log5(("%s vnetTransmitPendingPackets: complete frame is %u bytes.\n", INSTANCE(pThis), uSize)); 1217 1217 Assert(uSize <= VNET_MAX_FRAME_SIZE); 1218 /* Truncate oversized frames. */ 1219 if (uSize > VNET_MAX_FRAME_SIZE) 1220 uSize = VNET_MAX_FRAME_SIZE; 1218 1221 if (pThis->pDrv) 1219 1222 { … … 1235 1238 { 1236 1239 Assert(pSgBuf->cSegs == 1); 1240 pSgBuf->cbUsed = uSize; 1237 1241 /* Assemble a complete frame. */ 1238 for (unsigned int i = 1; i < elem.nOut ; i++)1242 for (unsigned int i = 1; i < elem.nOut && uSize > 0; i++) 1239 1243 { 1244 unsigned int cbSegment = RT_MIN(uSize, elem.aSegsOut[i].cb); 1240 1245 PDMDevHlpPhysRead(pThis->VPCI.CTX_SUFF(pDevIns), elem.aSegsOut[i].addr, 1241 1246 ((uint8_t*)pSgBuf->aSegs[0].pvSeg) + uOffset, 1242 elem.aSegsOut[i].cb); 1243 uOffset += elem.aSegsOut[i].cb; 1247 cbSegment); 1248 uOffset += cbSegment; 1249 uSize -= cbSegment; 1244 1250 } 1245 pSgBuf->cbUsed = uSize; 1246 vnetPacketDump(pThis, (uint8_t *)pSgBuf->aSegs[0].pvSeg, uSize, "--> Outgoing"); 1251 vnetPacketDump(pThis, (uint8_t *)pSgBuf->aSegs[0].pvSeg, pSgBuf->cbUsed, "--> Outgoing"); 1247 1252 if (pGso) 1248 1253 { … … 1285 1290 * This is not GSO frame but checksum offloading is requested. 1286 1291 */ 1287 vnetCompleteChecksum((uint8_t*)pSgBuf->aSegs[0].pvSeg, uSize,1292 vnetCompleteChecksum((uint8_t*)pSgBuf->aSegs[0].pvSeg, pSgBuf->cbUsed, 1288 1293 Hdr.u16CSumStart, Hdr.u16CSumOffset); 1289 1294 }
Note:
See TracChangeset
for help on using the changeset viewer.