Changeset 12941 in vbox
- Timestamp:
- Oct 2, 2008 2:50:06 PM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 37366
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
r12921 r12941 2157 2157 size_t cbMsg = MBLKL(pMsg); 2158 2158 2159 AssertRelease(cbMsg > 0); /** Yeah, die otherwise! */2160 pTag->pNext = NULL;2161 2159 pTag->cbPacket = cbMsg; 2162 2160 pTag->Checksum = RTCrc32(pMsg->b_rptr, cbMsg); … … 2201 2199 2202 2200 PVBOXNETFLTPACKETID pCur = NULL; 2203 if (pPromiscStream->cLoopback < VBOXNETFLT_LOOPBACK_SIZE) 2201 if (pPromiscStream->cLoopback < VBOXNETFLT_LOOPBACK_SIZE 2202 || ( pPromiscStream->pHead 2203 && pPromiscStream->pHead->cbPacket == 0)) 2204 2204 { 2205 2205 do … … 2216 2216 vboxNetFltSolarisInitPacketId(pCur, pMsg); 2217 2217 2218 pCur->pNext = NULL; 2218 2219 pPromiscStream->pHead = pCur; 2219 2220 pPromiscStream->pTail = pCur; … … 2224 2225 break; 2225 2226 } 2226 else if ( pPromiscStream->p Tail2227 && pPromiscStream->p Tail->cbPacket == 0)2227 else if ( pPromiscStream->pHead 2228 && pPromiscStream->pHead->cbPacket == 0) 2228 2229 { 2229 pCur = pPromiscStream->p Tail;2230 pCur = pPromiscStream->pHead; 2230 2231 vboxNetFltSolarisInitPacketId(pCur, pMsg); 2231 pPromiscStream->cLoopback++; 2232 2233 LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback re-used tail checksum=%u cLoopback=%d.\n", 2232 2233 LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback re-used head checksum=%u cLoopback=%d.\n", 2234 2234 pCur->Checksum, pPromiscStream->cLoopback)); 2235 2235 break; 2236 2236 } 2237 else if (pPromiscStream->pTail)2237 else 2238 2238 { 2239 2239 pCur = RTMemAlloc(sizeof(VBOXNETFLTPACKETID)); … … 2246 2246 vboxNetFltSolarisInitPacketId(pCur, pMsg); 2247 2247 2248 p PromiscStream->pTail->pNext = pCur;2249 pPromiscStream->p Tail= pCur;2248 pCur->pNext = pPromiscStream->pHead; 2249 pPromiscStream->pHead = pCur; 2250 2250 pPromiscStream->cLoopback++; 2251 2251 2252 LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback added tailchecksum=%u cLoopback=%d.\n", pCur->Checksum,2252 LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback added head checksum=%u cLoopback=%d.\n", pCur->Checksum, 2253 2253 pPromiscStream->cLoopback)); 2254 2254 break; … … 2259 2259 { 2260 2260 /* 2261 * Maximum loopback queue size reached. Re-use head as tail.2261 * Maximum loopback queue size reached. Re-use tail as head. 2262 2262 */ 2263 2263 Assert(pPromiscStream->pHead); 2264 2264 Assert(pPromiscStream->pTail); 2265 2265 2266 /* 2267 * Find tail's previous item. 2268 */ 2269 PVBOXNETFLTPACKETID pPrev = NULL; 2266 2270 pCur = pPromiscStream->pHead; 2267 pPromiscStream->pHead = pPromiscStream->pHead->pNext; 2268 pPromiscStream->pTail->pNext = pCur; 2269 pPromiscStream->pTail = pCur; 2270 pCur->pNext = NULL; 2271 pCur->cbPacket = 0; 2272 pPromiscStream->cLoopback--; 2271 2272 /** @todo consider if this is worth switching to a double linked list... */ 2273 while (pCur != pPromiscStream->pTail) 2274 { 2275 pPrev = pCur; 2276 pCur = pCur->pNext; 2277 } 2278 2279 pPromiscStream->pTail = pPrev; 2280 pPromiscStream->pTail->pNext = NULL; 2281 pCur->pNext = pPromiscStream->pHead; 2282 pPromiscStream->pHead = pCur; 2273 2283 2274 2284 vboxNetFltSolarisInitPacketId(pCur, pMsg); 2275 LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback recycled head!! checksum=%u cLoopback=%d\n", pCur->Checksum,2285 LogFlow((DEVICE_NAME ":vboxNetFltSolarisQueueLoopback recycled tail!! checksum=%u cLoopback=%d\n", pCur->Checksum, 2276 2286 pPromiscStream->cLoopback)); 2277 2287 } … … 2348 2358 /* 2349 2359 * Yes, it really is our own packet, mark it as handled 2350 * and move it to the tail and return it's found.2360 * and move it as a "free slot" to the head and return success. 2351 2361 */ 2352 2362 pCur->cbPacket = 0; … … 2354 2364 { 2355 2365 pPrev->pNext = pCur->pNext; 2356 pPromiscStream->pTail->pNext = pCur; 2357 pPromiscStream->pTail = pCur; 2358 pCur->pNext = NULL; 2359 } 2360 pPromiscStream->cLoopback--; 2366 pCur->pNext = pPromiscStream->pHead; 2367 pPromiscStream->pHead = pCur; 2368 } 2361 2369 fIsOurPacket = true; 2362 2370 2363 LogFlow((DEVICE_NAME ":vboxNetFltSolarisIsOurMBlk found packet %p Checksum=%u cLoopback Q=%d\n", pMsg, Checksum,2371 LogFlow((DEVICE_NAME ":vboxNetFltSolarisIsOurMBlk found packet %p Checksum=%u cLoopback=%d\n", pMsg, Checksum, 2364 2372 pPromiscStream->cLoopback)); 2365 2373 break; … … 2707 2715 } 2708 2716 else 2709 LogRel((DEVICE_NAME ":vboxNetFltPortOsSetActive queue not found!\n")); 2717 LogRel((DEVICE_NAME ":vboxNetFltPortOsSetActive queue not found!\n")); 2710 2718 } 2711 2719 else
Note:
See TracChangeset
for help on using the changeset viewer.