Changeset 97869 in vbox for trunk/include
- Timestamp:
- Dec 27, 2022 12:11:55 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 154958
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmnetinline.h
r96407 r97869 88 88 DECLINLINE(bool) PDMNetGsoIsValid(PCPDMNETWORKGSO pGso, size_t cbGsoMax, size_t cbFrame) 89 89 { 90 #define CHECK_COND_RETURN_FALSE(expr) if (RT_LIKELY(expr)) { /* likely */ } else return false 90 91 PDMNETWORKGSOTYPE enmType; 91 92 92 if (RT_LIKELY(cbGsoMax >= sizeof(*pGso))) 93 { /* likely */ } else return false; 93 CHECK_COND_RETURN_FALSE(cbGsoMax >= sizeof(*pGso)); 94 94 95 95 enmType = (PDMNETWORKGSOTYPE)pGso->u8Type; 96 if (RT_LIKELY( enmType > PDMNETWORKGSOTYPE_INVALID && enmType < PDMNETWORKGSOTYPE_END )) 97 { /* likely */ } else return false; 96 CHECK_COND_RETURN_FALSE(enmType > PDMNETWORKGSOTYPE_INVALID && enmType < PDMNETWORKGSOTYPE_END); 98 97 99 98 /* all types requires both headers. */ 100 if (RT_LIKELY( pGso->offHdr1 >= sizeof(RTNETETHERHDR) )) 101 { /* likely */ } else return false; 102 if (RT_LIKELY( pGso->offHdr2 > pGso->offHdr1 )) 103 { /* likely */ } else return false; 104 if (RT_LIKELY( pGso->cbHdrsTotal > pGso->offHdr2 )) 105 { /* likely */ } else return false; 99 CHECK_COND_RETURN_FALSE(pGso->offHdr1 >= sizeof(RTNETETHERHDR)); 100 CHECK_COND_RETURN_FALSE(pGso->offHdr2 > pGso->offHdr1); 101 CHECK_COND_RETURN_FALSE(pGso->cbHdrsTotal > pGso->offHdr2); 106 102 107 103 /* min size of the 1st header(s). */ … … 110 106 case PDMNETWORKGSOTYPE_IPV4_TCP: 111 107 case PDMNETWORKGSOTYPE_IPV4_UDP: 112 if (RT_LIKELY( (unsigned)pGso->offHdr2 - pGso->offHdr1 >= RTNETIPV4_MIN_LEN )) 113 { /* likely */ } else return false; 108 CHECK_COND_RETURN_FALSE((unsigned)pGso->offHdr2 - pGso->offHdr1 >= RTNETIPV4_MIN_LEN); 114 109 break; 115 110 case PDMNETWORKGSOTYPE_IPV6_TCP: 116 111 case PDMNETWORKGSOTYPE_IPV6_UDP: 117 if (RT_LIKELY( (unsigned)pGso->offHdr2 - pGso->offHdr1 >= RTNETIPV6_MIN_LEN )) 118 { /* likely */ } else return false; 112 CHECK_COND_RETURN_FALSE((unsigned)pGso->offHdr2 - pGso->offHdr1 >= RTNETIPV6_MIN_LEN); 119 113 break; 120 114 case PDMNETWORKGSOTYPE_IPV4_IPV6_TCP: 121 115 case PDMNETWORKGSOTYPE_IPV4_IPV6_UDP: 122 if (RT_LIKELY( (unsigned)pGso->offHdr2 - pGso->offHdr1 >= RTNETIPV4_MIN_LEN + RTNETIPV6_MIN_LEN ))123 { /* likely */ } else return false;124 break;116 CHECK_COND_RETURN_FALSE((unsigned)pGso->offHdr2 - pGso->offHdr1 >= RTNETIPV4_MIN_LEN + RTNETIPV6_MIN_LEN); 117 break; 118 /* These two have been rejected above already, but we need to include them to avoid gcc warnings. */ 125 119 case PDMNETWORKGSOTYPE_INVALID: 126 120 case PDMNETWORKGSOTYPE_END: 127 121 break; 128 /* no default case! want gcc warnings. */122 /* No default case! Want gcc warnings. */ 129 123 } 130 124 … … 135 129 case PDMNETWORKGSOTYPE_IPV6_TCP: 136 130 case PDMNETWORKGSOTYPE_IPV4_IPV6_TCP: 137 if (RT_LIKELY( (unsigned)pGso->cbHdrsTotal - pGso->offHdr2 >= RTNETTCP_MIN_LEN )) 138 { /* likely */ } else return false; 131 CHECK_COND_RETURN_FALSE((unsigned)pGso->cbHdrsTotal - pGso->offHdr2 >= RTNETTCP_MIN_LEN); 139 132 break; 140 133 case PDMNETWORKGSOTYPE_IPV4_UDP: 141 134 case PDMNETWORKGSOTYPE_IPV6_UDP: 142 135 case PDMNETWORKGSOTYPE_IPV4_IPV6_UDP: 143 if (RT_LIKELY( (unsigned)pGso->cbHdrsTotal - pGso->offHdr2 >= RTNETUDP_MIN_LEN ))144 { /* likely */ } else return false;145 break;136 CHECK_COND_RETURN_FALSE((unsigned)pGso->cbHdrsTotal - pGso->offHdr2 >= RTNETUDP_MIN_LEN); 137 break; 138 /* These two have been rejected above already, but we need to include them to avoid gcc warnings. */ 146 139 case PDMNETWORKGSOTYPE_INVALID: 147 140 case PDMNETWORKGSOTYPE_END: 148 141 break; 149 /* no default case! want gcc warnings. */142 /* No default case! Want gcc warnings. */ 150 143 } 151 144 152 145 /* There must be at more than one segment. */ 153 if (RT_LIKELY( cbFrame > pGso->cbHdrsTotal )) 154 { /* likely */ } else return false; 155 if (RT_LIKELY( cbFrame - pGso->cbHdrsTotal >= pGso->cbMaxSeg )) 156 { /* likely */ } else return false; 146 CHECK_COND_RETURN_FALSE(cbFrame > pGso->cbHdrsTotal); 147 CHECK_COND_RETURN_FALSE(cbFrame - pGso->cbHdrsTotal >= pGso->cbMaxSeg); 157 148 158 149 /* Make sure the segment size is enough to fit a UDP header. */ 159 if (RT_LIKELY(enmType != PDMNETWORKGSOTYPE_IPV4_UDP || pGso->cbMaxSeg >= RTNETUDP_MIN_LEN)) 160 { /* likely */ } else return false; 150 CHECK_COND_RETURN_FALSE(enmType != PDMNETWORKGSOTYPE_IPV4_UDP || pGso->cbMaxSeg >= RTNETUDP_MIN_LEN); 161 151 162 152 /* Make sure the segment size is not zero. */ 163 if (RT_LIKELY(pGso->cbMaxSeg > 0)) 164 { /* likely */ } else return false; 153 CHECK_COND_RETURN_FALSE(pGso->cbMaxSeg > 0); 165 154 166 155 return true; 156 #undef CHECK_COND_RETURN_FALSE 167 157 } 168 158
Note:
See TracChangeset
for help on using the changeset viewer.