Changeset 28037 in vbox for trunk/include
- Timestamp:
- Apr 7, 2010 9:56:45 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 59744
- Location:
- trunk/include/VBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/intnetinline.h
r28027 r28037 82 82 pSG->GsoCtx.cbMaxSeg= 0; 83 83 pSG->GsoCtx.offHdr1 = 0; 84 pSG->GsoCtx.cbHdr1 = 0;85 84 pSG->GsoCtx.offHdr2 = 0; 86 pSG->GsoCtx.cbHdr2 = 0; 85 pSG->GsoCtx.au8Unused[0] = 0; 86 pSG->GsoCtx.au8Unused[1] = 0; 87 87 #if ARCH_BITS == 64 88 88 pSG->uPadding = 0; … … 120 120 pSG->GsoCtx.cbMaxSeg= pGso->cbMaxSeg; 121 121 pSG->GsoCtx.offHdr1 = pGso->offHdr1; 122 pSG->GsoCtx.cbHdr1 = pGso->cbHdr1;123 122 pSG->GsoCtx.offHdr2 = pGso->offHdr2; 124 pSG->GsoCtx.cbHdr2 = pGso->cbHdr2; 123 pSG->GsoCtx.au8Unused[0] = 0; 124 pSG->GsoCtx.au8Unused[1] = 0; 125 125 #if ARCH_BITS == 64 126 126 pSG->uPadding = 0; -
trunk/include/VBox/pdmnetinline.h
r28028 r28037 52 52 53 53 PDMNETWORKGSOTYPE const enmType = (PDMNETWORKGSOTYPE)pGso->u8Type; 54 if (RT_UNLIKELY( enmType <= PDMNETWORKGSOTYPE_INVALID || enmType >= PDMNETWORKGSOTYPE_END))54 if (RT_UNLIKELY( enmType <= PDMNETWORKGSOTYPE_INVALID || enmType >= PDMNETWORKGSOTYPE_END )) 55 55 return false; 56 56 57 57 /* all types requires both headers. */ 58 if (RT_UNLIKELY(pGso->offHdr1 < sizeof(RTNETETHERHDR))) 59 return false; 60 if (RT_UNLIKELY(pGso->offHdr2 < sizeof(RTNETETHERHDR))) 61 return false; 62 if (RT_UNLIKELY(pGso->offHdr2 < (unsigned)pGso->offHdr1 + pGso->cbHdr1)) 63 return false; 64 if (RT_UNLIKELY(pGso->cbHdrs < (unsigned)pGso->offHdr2 + pGso->cbHdr2)) 58 if (RT_UNLIKELY( pGso->offHdr1 < sizeof(RTNETETHERHDR) )) 59 return false; 60 if (RT_UNLIKELY( pGso->offHdr2 <= pGso->offHdr1 )) 61 return false; 62 if (RT_UNLIKELY( pGso->cbHdrs <= pGso->offHdr2 )) 65 63 return false; 66 64 … … 70 68 case PDMNETWORKGSOTYPE_IPV4_TCP: 71 69 case PDMNETWORKGSOTYPE_IPV4_UDP: 72 if (RT_UNLIKELY(pGso->cbHdr1 < sizeof(RTNETIPV4_MIN_LEN))) 70 if (RT_UNLIKELY( (unsigned)pGso->offHdr2 - pGso->offHdr1 < RTNETIPV4_MIN_LEN )) 71 return false; 72 break; 73 case PDMNETWORKGSOTYPE_IPV6_TCP: 74 case PDMNETWORKGSOTYPE_IPV6_UDP: 75 if (RT_UNLIKELY( (unsigned)pGso->offHdr2 - pGso->offHdr1 < RTNETIPV6_MIN_LEN )) 73 76 return false; 74 77 break; 75 78 case PDMNETWORKGSOTYPE_IPV4_IPV6_TCP: 76 79 case PDMNETWORKGSOTYPE_IPV4_IPV6_UDP: 77 if (RT_UNLIKELY(pGso->cbHdr1 < sizeof(RTNETIPV4_MIN_LEN))) 78 return false; 79 if (RT_UNLIKELY(pGso->offHdr1 + pGso->cbHdr1 + RTNETIPV6_MIN_LEN > pGso->offHdr2)) 80 return false; 81 break; 82 case PDMNETWORKGSOTYPE_IPV6_TCP: 83 case PDMNETWORKGSOTYPE_IPV6_UDP: 84 if (RT_UNLIKELY(pGso->cbHdr1 < sizeof(RTNETIPV6_MIN_LEN))) 80 if (RT_UNLIKELY( (unsigned)pGso->offHdr2 - pGso->offHdr1 < RTNETIPV4_MIN_LEN + RTNETIPV6_MIN_LEN )) 85 81 return false; 86 82 break; … … 97 93 case PDMNETWORKGSOTYPE_IPV6_TCP: 98 94 case PDMNETWORKGSOTYPE_IPV4_IPV6_TCP: 99 if (RT_UNLIKELY( pGso->cbHdr2 < sizeof(RTNETTCP_MIN_LEN)))95 if (RT_UNLIKELY( (unsigned)pGso->cbHdrs - pGso->offHdr2 < RTNETTCP_MIN_LEN )) 100 96 return false; 101 97 break; … … 103 99 case PDMNETWORKGSOTYPE_IPV6_UDP: 104 100 case PDMNETWORKGSOTYPE_IPV4_IPV6_UDP: 105 if (RT_UNLIKELY( pGso->cbHdr2 < sizeof(RTNETUDP_MIN_LEN)))101 if (RT_UNLIKELY( (unsigned)pGso->cbHdrs - pGso->offHdr2 < RTNETUDP_MIN_LEN )) 106 102 return false; 107 103 break; … … 113 109 114 110 /* There must be at more than one segment. */ 115 if (RT_UNLIKELY( cbFrame <= pGso->cbHdrs))116 return false; 117 if (RT_UNLIKELY( cbFrame - pGso->cbHdrs < pGso->cbMaxSeg))111 if (RT_UNLIKELY( cbFrame <= pGso->cbHdrs )) 112 return false; 113 if (RT_UNLIKELY( cbFrame - pGso->cbHdrs < pGso->cbMaxSeg )) 118 114 return false; 119 115 … … 215 211 { 216 212 PRTNETIPV6 pIpHdr = (PRTNETIPV6)&pbSegHdrs[offIpHdr]; 217 uint 32_t cbPayload = cbHdrs - offIpHdr + sizeof(*pIpHdr) + cbSegPayload;213 uint16_t cbPayload = (uint16_t)(cbHdrs - (offIpHdr + sizeof(RTNETIPV6)) + cbSegPayload); 218 214 pIpHdr->ip6_plen = RT_H2N_U16(cbPayload); 219 cbPayload -= (offPktHdr - offPktHdr - sizeof(*pIpHdr)); 220 return RTNetIPv6PseudoChecksumEx(pIpHdr, bProtocol, (uint16_t)cbPayload); 215 return RTNetIPv6PseudoChecksumEx(pIpHdr, bProtocol, (uint16_t)(cbHdrs - offPktHdr + cbSegPayload)); 221 216 } 222 217 … … 309 304 case PDMNETWORKGSOTYPE_IPV6_TCP: 310 305 pdmNetGsoUpdateTcpHdr(pdmNetGsoUpdateIPv6Hdr(pbSegHdrs, pGso->offHdr1, cbSegPayload, pGso->cbHdrs, 311 pGso-> cbHdr2, RTNETIPV4_PROT_TCP),306 pGso->offHdr2, RTNETIPV4_PROT_TCP), 312 307 pbSegHdrs, pGso->offHdr2, pbSegPayload, cbSegPayload, iSeg * pGso->cbMaxSeg, 313 308 pGso->cbHdrs, iSeg + 1 == cSegs); … … 315 310 case PDMNETWORKGSOTYPE_IPV6_UDP: 316 311 pdmNetGsoUpdateUdpHdr(pdmNetGsoUpdateIPv6Hdr(pbSegHdrs, pGso->offHdr1, cbSegPayload, pGso->cbHdrs, 317 pGso-> cbHdr2, RTNETIPV4_PROT_UDP),312 pGso->offHdr2, RTNETIPV4_PROT_UDP), 318 313 pbSegHdrs, pGso->offHdr2, pbSegPayload, cbSegPayload, pGso->cbHdrs); 319 314 break; … … 321 316 pdmNetGsoUpdateIPv4Hdr(pbSegHdrs, pGso->offHdr1, cbSegPayload, iSeg, pGso->cbHdrs); 322 317 pdmNetGsoUpdateTcpHdr(pdmNetGsoUpdateIPv6Hdr(pbSegHdrs, pgmNetGsoCalcIpv6Offset(pbSegHdrs, pGso->offHdr1), 323 cbSegPayload, pGso->cbHdrs, pGso-> cbHdr2, RTNETIPV4_PROT_TCP),318 cbSegPayload, pGso->cbHdrs, pGso->offHdr2, RTNETIPV4_PROT_TCP), 324 319 pbSegHdrs, pGso->offHdr2, pbSegPayload, cbSegPayload, iSeg * pGso->cbMaxSeg, 325 320 pGso->cbHdrs, iSeg + 1 == cSegs); … … 328 323 pdmNetGsoUpdateIPv4Hdr(pbSegHdrs, pGso->offHdr1, cbSegPayload, iSeg, pGso->cbHdrs); 329 324 pdmNetGsoUpdateUdpHdr(pdmNetGsoUpdateIPv6Hdr(pbSegHdrs, pgmNetGsoCalcIpv6Offset(pbSegHdrs, pGso->offHdr1), 330 cbSegPayload, pGso->cbHdrs, pGso-> cbHdr2, RTNETIPV4_PROT_UDP),325 cbSegPayload, pGso->cbHdrs, pGso->offHdr2, RTNETIPV4_PROT_UDP), 331 326 pbSegHdrs, pGso->offHdr2, pbSegPayload, cbSegPayload, pGso->cbHdrs); 332 327 break; … … 402 397 case PDMNETWORKGSOTYPE_IPV6_TCP: 403 398 pdmNetGsoUpdateTcpHdr(pdmNetGsoUpdateIPv6Hdr(pbSegHdrs, pGso->offHdr1, cbSegPayload, pGso->cbHdrs, 404 pGso-> cbHdr2, RTNETIPV4_PROT_TCP),399 pGso->offHdr2, RTNETIPV4_PROT_TCP), 405 400 pbSegHdrs, pGso->offHdr2, pbSegPayload, cbSegPayload, iSeg * pGso->cbMaxSeg, 406 401 pGso->cbHdrs, iSeg + 1 == cSegs); … … 408 403 case PDMNETWORKGSOTYPE_IPV6_UDP: 409 404 pdmNetGsoUpdateUdpHdr(pdmNetGsoUpdateIPv6Hdr(pbSegHdrs, pGso->offHdr1, cbSegPayload, pGso->cbHdrs, 410 pGso-> cbHdr2, RTNETIPV4_PROT_UDP),405 pGso->offHdr2, RTNETIPV4_PROT_UDP), 411 406 pbSegHdrs, pGso->offHdr2, pbSegPayload, cbSegPayload, pGso->cbHdrs); 412 407 break; … … 414 409 pdmNetGsoUpdateIPv4Hdr(pbSegHdrs, pGso->offHdr1, cbSegPayload, iSeg, pGso->cbHdrs); 415 410 pdmNetGsoUpdateTcpHdr(pdmNetGsoUpdateIPv6Hdr(pbSegHdrs, pgmNetGsoCalcIpv6Offset(pbSegHdrs, pGso->offHdr1), 416 cbSegPayload, pGso->cbHdrs, pGso-> cbHdr2, RTNETIPV4_PROT_TCP),411 cbSegPayload, pGso->cbHdrs, pGso->offHdr2, RTNETIPV4_PROT_TCP), 417 412 pbSegHdrs, pGso->offHdr2, pbSegPayload, cbSegPayload, iSeg * pGso->cbMaxSeg, 418 413 pGso->cbHdrs, iSeg + 1 == cSegs); … … 421 416 pdmNetGsoUpdateIPv4Hdr(pbSegHdrs, pGso->offHdr1, cbSegPayload, iSeg, pGso->cbHdrs); 422 417 pdmNetGsoUpdateUdpHdr(pdmNetGsoUpdateIPv6Hdr(pbSegHdrs, pgmNetGsoCalcIpv6Offset(pbSegHdrs, pGso->offHdr1), 423 cbSegPayload, pGso->cbHdrs, pGso-> cbHdr2, RTNETIPV4_PROT_UDP),418 cbSegPayload, pGso->cbHdrs, pGso->offHdr2, RTNETIPV4_PROT_UDP), 424 419 pbSegHdrs, pGso->offHdr2, pbSegPayload, cbSegPayload, pGso->cbHdrs); 425 420 break; -
trunk/include/VBox/types.h
r28025 r28037 744 744 /** Invalid zero value. */ 745 745 PDMNETWORKGSOTYPE_INVALID = 0, 746 /** TCP/IPv4 . */746 /** TCP/IPv4 - no CWR/ECE encoding. */ 747 747 PDMNETWORKGSOTYPE_IPV4_TCP, 748 /** TCP/IPv6 . */748 /** TCP/IPv6 - no CWR/ECE encoding. */ 749 749 PDMNETWORKGSOTYPE_IPV6_TCP, 750 750 /** UDP/IPv4. */ … … 752 752 /** UDP/IPv6. */ 753 753 PDMNETWORKGSOTYPE_IPV6_UDP, 754 /** TCP/IPv6 over IPv4 tunneling .754 /** TCP/IPv6 over IPv4 tunneling - no CWR/ECE encoding. 755 755 * The header offsets and sizes relates to IPv4 and TCP, the IPv6 header is 756 756 * figured out as needed. … … 788 788 /** Offset of the first header (IPv4 / IPv6). 0 if not not needed. */ 789 789 uint8_t offHdr1; 790 /** The size of the first header (IPv4 / IPv6). 0 if not not needed. */791 uint8_t cbHdr1;792 793 790 /** Offset of the second header (TCP / UDP). 0 if not not needed. */ 794 791 uint8_t offHdr2; 795 /** The size of the second header (TCP / UDP). 0 if not not needed. */796 uint8_t cbHdr2;792 /** Unused. */ 793 uint8_t au8Unused[2]; 797 794 } PDMNETWORKGSO; 798 795 /** Pointer to a GSO context. */
Note:
See TracChangeset
for help on using the changeset viewer.