Lines Matching refs:pIf

89     struct INTNETIF        *pIf;
154 struct INTNETIF *pIf;
728 * @param pIf The interface.
730 DECLINLINE(void) intnetR0BusyDecIf(PINTNETIF pIf)
732 intnetR0BusyDec(pIf->pNetwork, &pIf->cBusy);
755 * @param pIf The interface.
757 DECLINLINE(void) intnetR0BusyIncIf(PINTNETIF pIf)
759 uint32_t cNewBusy = ASMAtomicIncU32(&pIf->cBusy);
785 * @param pIf The interface instance.
788 DECLINLINE(int) intnetR0IfRetain(PINTNETIF pIf, PSUPDRVSESSION pSession)
790 int rc = SUPR0ObjAddRefEx(pIf->pvObj, pSession, true /* fNoBlocking */);
801 * @param pIf The interface instance.
804 DECLINLINE(bool) intnetR0IfRelease(PINTNETIF pIf, PSUPDRVSESSION pSession)
806 int rc = SUPR0ObjRelease(pIf->pvObj, pSession);
828 PINTNETIF pIf = (PINTNETIF)pvObj;
829 if (pIf->hIf != INTNET_HANDLE_INVALID) /* Don't try retain it if called from intnetR0IfDestruct. */
830 return intnetR0IfRetain(pIf, (PSUPDRVSESSION)pvCtx);
840 * @param pIf The interface.
842 DECL_FORCE_INLINE(bool) intnetR0IfHasMacAddr(PINTNETIF pIf)
844 return pIf->fMacSet || !(pIf->MacAddr.au8[0] & 1);
855 * @param pIf The interface.
857 DECLINLINE(PINTNETMACTABENTRY) intnetR0NetworkFindMacAddrEntry(PINTNETNETWORK pNetwork, PINTNETIF pIf)
862 if (pNetwork->MacTab.paEntries[iIf].pIf == pIf)
1103 * @param pIf The interface (for logging).
1108 static void intnetR0IfAddrCacheDeleteIt(PINTNETIF pIf, PINTNETADDRCACHE pCache, int iEntry, const char *pszMsg)
1113 INTNETADDRTYPE enmAddrType = (INTNETADDRTYPE)(uintptr_t)(pCache - &pIf->aAddrCache[0]);
1119 pIf->hIf, &pIf->MacAddr, iEntry, pAddr->IPv4, pszMsg));
1123 pIf->hIf, &pIf->MacAddr, iEntry, pAddr->IPv6, pszMsg));
1127 pIf->hIf, &pIf->MacAddr, enmAddrType, iEntry, pCache->cbAddress, pAddr, pszMsg));
1145 * @param pIf The interface (for logging).
1150 DECLINLINE(void) intnetR0IfAddrCacheDelete(PINTNETIF pIf, PINTNETADDRCACHE pCache, PCRTNETADDRU pAddr, uint8_t const cbAddr, const char *pszMsg)
1154 intnetR0IfAddrCacheDeleteIt(pIf, pCache, i, pszMsg);
1178 PINTNETIF pIf = pNetwork->MacTab.paEntries[iIf].pIf;
1179 int i = intnetR0IfAddrCacheLookup(&pIf->aAddrCache[enmType], pAddr, cbAddr);
1181 intnetR0IfAddrCacheDeleteIt(pIf, &pIf->aAddrCache[enmType], i, pszMsg);
1208 PINTNETIF pIf = pNetwork->MacTab.paEntries[iIf].pIf;
1209 if (pIf != pIfSender)
1211 int i = intnetR0IfAddrCacheLookup(&pIf->aAddrCache[enmType], pAddr, cbAddr);
1213 intnetR0IfAddrCacheDeleteIt(pIf, &pIf->aAddrCache[enmType], i, pszMsg);
1239 PINTNETIF pIf = pNetwork->MacTab.paEntries[iIf].pIf;
1240 int i = intnetR0IfAddrCacheLookup(&pIf->aAddrCache[enmType], pAddr, cbAddr);
1243 intnetR0BusyIncIf(pIf);
1245 return pIf;
1260 * @param pIf The interface (for logging).
1265 static void intnetR0IfAddrCacheAddIt(PINTNETIF pIf, PINTNETADDRCACHE pCache, PCRTNETADDRU pAddr, const char *pszMsg)
1267 PINTNETNETWORK pNetwork = pIf->pNetwork;
1282 (int)(uintptr_t)(pCache - &pIf->aAddrCache[0]), pCache->cbAddress, pCache->pbEntries));
1295 INTNETADDRTYPE enmAddrType = (INTNETADDRTYPE)(uintptr_t)(pCache - &pIf->aAddrCache[0]);
1300 pIf->hIf, &pIf->MacAddr, pCache->cEntries, pAddr->IPv4, pszMsg));
1304 pIf->hIf, &pIf->MacAddr, pCache->cEntries, pAddr->IPv6, pszMsg));
1308 pIf->hIf, &pIf->MacAddr, enmAddrType, pCache->cEntries, pCache->cbAddress, pAddr, pszMsg));
1322 * @param pIf The interface (for logging).
1328 static void intnetR0IfAddrCacheAddSlow(PINTNETIF pIf, PINTNETADDRCACHE pCache, PCRTNETADDRU pAddr, uint8_t const cbAddr, const char *pszMsg)
1347 intnetR0IfAddrCacheAddIt(pIf, pCache, pAddr, pszMsg);
1356 * @param pIf The interface (for logging).
1362 DECLINLINE(void) intnetR0IfAddrCacheAdd(PINTNETIF pIf, PINTNETADDRCACHE pCache, PCRTNETADDRU pAddr,
1376 intnetR0IfAddrCacheAddSlow(pIf, pCache, pAddr, cbAddr, pszMsg);
1507 PINTNETIF pIf = pTab->paEntries[iIfMac].pIf; AssertPtr(pIf); Assert(pIf->pNetwork == pNetwork);
1508 bool fExact = intnetR0IfAddrCacheLookup(&pIf->aAddrCache[enmL3AddrType], pL3Addr, cbL3Addr) >= 0;
1514 pDstTab->aIfs[iIfDst].pIf = pIf;
1516 intnetR0BusyIncIf(pIf);
1519 pDstMacAddr = &pIf->MacAddr; /* Avoids duplicates being sent to the host. */
1536 PINTNETIF pIf = pTab->paEntries[iIfMac].pIf; AssertPtr(pIf); Assert(pIf->pNetwork == pNetwork);
1537 if (intnetR0IfAddrCacheLookup(&pIf->aAddrCache[enmL3AddrType], pL3Addr, cbL3Addr) < 0)
1540 pDstTab->aIfs[iIfDst].pIf = pIf;
1542 intnetR0BusyIncIf(pIf);
1678 PINTNETIF pIf = pTab->paEntries[iIfMac].pIf; AssertPtr(pIf); Assert(pIf->pNetwork == pNetwork);
1679 if (RT_LIKELY(pIf != pIfSender)) /* paranoia */
1682 pDstTab->aIfs[iIfDst].pIf = pIf;
1684 intnetR0BusyIncIf(pIf);
1704 PINTNETIF pIf = pTab->paEntries[iIfMac].pIf; AssertPtr(pIf); Assert(pIf->pNetwork == pNetwork);
1706 pDstTab->aIfs[iIfDst].pIf = pIf;
1708 intnetR0BusyIncIf(pIf);
1780 PINTNETIF pIf = pTab->paEntries[iIfMac].pIf; AssertPtr(pIf); Assert(pIf->pNetwork == pNetwork);
1781 if (pIf != pIfSender)
1784 pDstTab->aIfs[iIfDst].pIf = pIf;
1786 intnetR0BusyIncIf(pIf);
1844 PINTNETIF pIf = pTab->paEntries[iIfMac].pIf; AssertPtr(pIf); Assert(pIf->pNetwork == pNetwork);
1846 pDstTab->aIfs[iIfDst].pIf = pIf;
1848 intnetR0BusyIncIf(pIf);
1958 PINTNETIF pIf = pTab->paEntries[i].pIf; AssertPtr(pIf);
1966 PINTNETDSTTAB pOld = pIf->pDstTab;
1968 && ASMAtomicCmpXchgPtr(&pIf->pDstTab, pNew, pOld))
1973 intnetR0BusyWait(pNetwork, &pIf->cBusy);
2029 paOld[i].pIf = NULL;
2134 PINTNETIF pCur = pNetwork->MacTab.paEntries[iIf].pIf;
2170 PINTNETIF pCur = pNetwork->MacTab.paEntries[iIf].pIf;
2399 * @param pIf The interface that's sending the frame.
2405 static void intnetR0IfSnoopIPv6SourceAddr(PINTNETIF pIf, PCRTNETIPV6 pIpHdr, uint32_t cbPacket, bool fGso)
2423 && intnetR0IfAddrCacheLookupLikely(&pIf->aAddrCache[kIntNetAddrType_IPv6], &Addr, sizeof(Addr.IPv6)) < 0)
2425 intnetR0IfAddrCacheAddIt(pIf, &pIf->aAddrCache[kIntNetAddrType_IPv6], &Addr, "if/ipv6");
2437 * @param pIf The interface that's sending the frame.
2443 static void intnetR0IfSnoopIPv4SourceAddr(PINTNETIF pIf, PCRTNETIPV4 pIpHdr, uint32_t cbPacket, bool fGso)
2464 && intnetR0IfAddrCacheLookupLikely(&pIf->aAddrCache[kIntNetAddrType_IPv4], &Addr, sizeof(Addr.IPv4)) < 0)
2471 intnetR0IfAddrCacheAddIt(pIf, &pIf->aAddrCache[kIntNetAddrType_IPv4], &Addr, "if/ipv4");
2491 intnetR0NetworkSnoopDhcp(pIf->pNetwork, pIpHdr, pUdpHdr, cbPacket - cbHdr);
2503 * @param pIf The interface that's sending the frame.
2510 static void intnetR0IfSnoopArpAddr(PINTNETIF pIf, PCRTNETARPIPV4 pArpIPv4, uint32_t cbPacket, uint16_t *pfSgFlags)
2542 intnetR0IfAddrCacheDelete(pIf, &pIf->aAddrCache[kIntNetAddrType_IPv4],
2545 if ( !memcmp(&pArpIPv4->ar_sha, &pIf->MacAddr, sizeof(RTMAC))
2547 intnetR0IfAddrCacheAdd(pIf, &pIf->aAddrCache[kIntNetAddrType_IPv4],
2557 * @param pIf The interface that's sending the frame.
2564 static void intnetR0IfSnoopAddr(PINTNETIF pIf, uint8_t const *pbFrame, uint32_t cbFrame, bool fGso, uint16_t *pfSgFlags)
2577 intnetR0IfSnoopIPv4SourceAddr(pIf, (PCRTNETIPV4)((PCRTNETETHERHDR)pbFrame + 1), cbFrame, fGso);
2581 intnetR0IfSnoopIPv6SourceAddr(pIf, (PCRTNETIPV6)((PCRTNETETHERHDR)pbFrame + 1), cbFrame, fGso);
2588 intnetR0IfSnoopIpxSourceAddr(pIf, (PCINTNETIPX)((PCRTNETETHERHDR)pbFrame + 1), cbFrame, pfSgFlags);
2592 intnetR0IfSnoopArpAddr(pIf, (PCRTNETARPIPV4)((PCRTNETETHERHDR)pbFrame + 1), cbFrame, pfSgFlags);
2632 * @param pIf The interface.
2637 static void intnetR0IfSend(PINTNETIF pIf, PINTNETIF pIfSender, PINTNETSG pSG, PCRTMAC pNewDstMac)
2642 RTSpinlockAcquire(pIf->hRecvInSpinlock);
2643 int rc = intnetR0RingWriteFrame(&pIf->pIntBuf->Recv, pSG, pNewDstMac);
2644 RTSpinlockRelease(pIf->hRecvInSpinlock);
2647 pIf->cYields = 0;
2648 RTSemEventSignal(pIf->hRecvEvent);
2652 Log(("intnetR0IfSend: overflow cb=%d hIf=%RX32\n", pSG->cbTotal, pIf->hIf));
2657 if ( pIf->fActive
2658 && pIf->cYields < 4 /* just twice */
2666 RTSemEventSignal(pIf->hRecvEvent);
2669 RTSpinlockAcquire(pIf->hRecvInSpinlock);
2670 rc = intnetR0RingWriteFrame(&pIf->pIntBuf->Recv, pSG, pNewDstMac);
2671 RTSpinlockRelease(pIf->hRecvInSpinlock);
2674 STAM_REL_COUNTER_INC(&pIf->pIntBuf->cStatYieldsOk);
2675 RTSemEventSignal(pIf->hRecvEvent);
2678 pIf->cYields++;
2680 STAM_REL_COUNTER_INC(&pIf->pIntBuf->cStatYieldsNok);
2684 STAM_REL_COUNTER_INC(&pIf->pIntBuf->cStatLost);
2685 RTSemEventSignal(pIf->hRecvEvent);
3225 PINTNETIF pIf = intnetR0NetworkAddrCacheLookupIf(pNetwork, (PCRTNETADDRU)&pArpIPv4->ar_tpa,
3227 if (pIf)
3229 Log6(("fw: ar_tha %.6Rhxs -> %.6Rhxs\n", &pArpIPv4->ar_tha, &pIf->MacAddr));
3230 pArpIPv4->ar_tha = pIf->MacAddr;
3233 Log6(("fw: DstMac %.6Rhxs -> %.6Rhxs\n", &pEthHdr->DstMac, &pIf->MacAddr));
3234 pEthHdr->DstMac = pIf->MacAddr;
3236 intnetR0SgWritePart(pSG, RT_OFFSETOF(RTNETETHERHDR, DstMac), sizeof(RTMAC), &pIf->MacAddr);
3238 intnetR0BusyDecIf(pIf);
3652 PINTNETIF pIf = pDstTab->aIfs[iIf].pIf;
3653 intnetR0BusyDecIf(pIf);
3654 pDstTab->aIfs[iIf].pIf = NULL;
3678 PINTNETIF pIf = pDstTab->aIfs[iIf].pIf;
3679 intnetR0IfSend(pIf, pIfSender, pSG,
3680 pDstTab->aIfs[iIf].fReplaceDstMac ? &pIf->MacAddr: NULL);
3681 intnetR0BusyDecIf(pIf);
3682 pDstTab->aIfs[iIf].pIf = NULL;
3852 PINTNETIF pIf = (PINTNETIF)RTHandleTableLookupWithCtx(pIntNet->hHtIfs, hIf, pSession);
3853 if (!pIf)
3855 STAM_REL_PROFILE_START(&pIf->pIntBuf->StatSend1, a);
3861 intnetR0BusyIncIf(pIf);
3862 PINTNETNETWORK pNetwork = pIf->pNetwork;
3868 PINTNETDSTTAB pDstTab = ASMAtomicXchgPtrT(&pIf->pDstTab, NULL, PINTNETDSTTAB);
3879 while ((pHdr = IntNetRingGetNextFrameToRead(&pIf->pIntBuf->Send)) != NULL)
3885 void *pvCurFrame = IntNetHdrGetFramePtr(pHdr, pIf->pIntBuf);
3888 intnetR0IfSnoopAddr(pIf, (uint8_t *)pvCurFrame, pHdr->cbFrame, false /*fGso*/, (uint16_t *)&Sg.fFlags);
3889 enmSwDecision = intnetR0NetworkSend(pNetwork, pIf, 0 /*fSrc*/, &Sg, pDstTab);
3894 PPDMNETWORKGSO pGso = IntNetHdrGetGsoContext(pHdr, pIf->pIntBuf);
3901 intnetR0IfSnoopAddr(pIf, (uint8_t *)pvCurFrame, cbFrame, true /*fGso*/, (uint16_t *)&Sg.fFlags);
3902 enmSwDecision = intnetR0NetworkSend(pNetwork, pIf, 0 /*fSrc*/, &Sg, pDstTab);
3906 STAM_REL_COUNTER_INC(&pIf->pIntBuf->cStatBadFrames); /* ignore */
3914 STAM_REL_COUNTER_INC(&pIf->pIntBuf->cStatBadFrames); /* ignore */
3924 IntNetRingSkipFrame(&pIf->pIntBuf->Send);
3930 Assert(!pIf->pDstTab);
3931 ASMAtomicWritePtr(&pIf->pDstTab, pDstTab);
3942 intnetR0BusyDecIf(pIf);
3943 STAM_REL_PROFILE_STOP(&pIf->pIntBuf->StatSend1, a);
3944 intnetR0IfRelease(pIf, pSession);
3994 PINTNETIF pIf = (PINTNETIF)RTHandleTableLookupWithCtx(pIntNet->hHtIfs, hIf, pSession);
3995 if (!pIf)
4007 *ppRing3Buf = pIf->pIntBufR3;
4009 *ppRing0Buf = (R0PTRTYPE(PINTNETBUF))pIf->pIntBuf; /* tstIntNetR0 mess */
4014 intnetR0IfRelease(pIf, pSession);
4056 PINTNETIF pIf = (PINTNETIF)RTHandleTableLookupWithCtx(pIntNet->hHtIfs, hIf, pSession);
4057 if (!pIf)
4064 int rc = RTSemFastMutexRequest(pIf->pNetwork->FastMutex);
4070 rc = RTSemFastMutexRelease(pIf->pNetwork->FastMutex);
4072 intnetR0IfRelease(pIf, pSession);
4097 PINTNETIF pIf = (PINTNETIF)RTHandleTableLookupWithCtx(pIntNet->hHtIfs, hIf, pSession);
4098 if (!pIf)
4109 intnetR0BusyIncIf(pIf);
4110 PINTNETNETWORK pNetwork = pIf->pNetwork;
4115 if (pIf->fPromiscuousReal != fPromiscuous)
4118 && (pIf->fOpenFlags & INTNET_OPEN_FLAGS_IF_PROMISC_ALLOW)
4123 pIf->fPromiscuousReal = fPromiscuous;
4125 PINTNETMACTABENTRY pEntry = intnetR0NetworkFindMacAddrEntry(pNetwork, pIf); Assert(pEntry);
4139 && (pIf->fOpenFlags & INTNET_OPEN_FLAGS_IF_PROMISC_SEE_TRUNK);
4157 intnetR0BusyDecIf(pIf);
4158 intnetR0IfRelease(pIf, pSession);
4198 PINTNETIF pIf = (PINTNETIF)RTHandleTableLookupWithCtx(pIntNet->hHtIfs, hIf, pSession);
4199 if (!pIf)
4210 intnetR0BusyIncIf(pIf);
4211 PINTNETNETWORK pNetwork = pIf->pNetwork;
4218 if (memcmp(&pIf->MacAddr, pMac, sizeof(pIf->MacAddr)))
4221 hIf, &pIf->MacAddr, pMac));
4224 PINTNETMACTABENTRY pEntry = intnetR0NetworkFindMacAddrEntry(pNetwork, pIf); Assert(pEntry);
4227 pIf->MacAddr = *pMac;
4228 pIf->fMacSet = true;
4243 pIfPort->pfnNotifyMacAddress(pIfPort, pIf->pvIfData, pMac);
4250 intnetR0BusyDecIf(pIf);
4251 intnetR0IfRelease(pIf, pSession);
4284 static int intnetR0NetworkSetIfActive(PINTNETNETWORK pNetwork, PINTNETIF pIf, bool fActive)
4288 AssertPtr(pIf);
4301 if (pIf->fActive != fActive)
4303 PINTNETMACTABENTRY pEntry = intnetR0NetworkFindMacAddrEntry(pNetwork, pIf); Assert(pEntry);
4307 pIf->fActive = fActive;
4372 PINTNETIF pIf = (PINTNETIF)RTHandleTableLookupWithCtx(pIntNet->hHtIfs, hIf, pSession);
4373 if (!pIf)
4395 intnetR0BusyIncIf(pIf);
4397 PINTNETNETWORK pNetwork = pIf->pNetwork;
4399 rc = intnetR0NetworkSetIfActive(pNetwork, pIf, fActive);
4403 intnetR0BusyDecIf(pIf);
4407 intnetR0IfRelease(pIf, pSession);
4450 PINTNETIF pIf = (PINTNETIF)RTHandleTableLookupWithCtx(pIntNet->hHtIfs, hIf, pSession);
4451 if (!pIf)
4457 const INTNETIFHANDLE hIfSelf = pIf->hIf;
4458 const RTSEMEVENT hRecvEvent = pIf->hRecvEvent;
4459 const bool fDestroying = ASMAtomicReadBool(&pIf->fDestroying);
4482 ASMAtomicIncU32(&pIf->cSleepers);
4484 if (pIf->hRecvEvent == hRecvEvent)
4486 ASMAtomicDecU32(&pIf->cSleepers);
4487 if (!pIf->fDestroying)
4489 if (intnetR0IfRelease(pIf, pSession))
4536 PINTNETIF pIf = (PINTNETIF)RTHandleTableLookupWithCtx(pIntNet->hHtIfs, hIf, pSession);
4537 if (!pIf)
4543 const INTNETIFHANDLE hIfSelf = pIf->hIf;
4544 const RTSEMEVENT hRecvEvent = pIf->hRecvEvent;
4545 const bool fDestroying = ASMAtomicReadBool(&pIf->fDestroying);
4561 ASMAtomicWriteBool(&pIf->fDestroying, true);
4563 uint32_t cSleepers = ASMAtomicReadU32(&pIf->cSleepers) + 1;
4566 int rc = RTSemEventSignal(pIf->hRecvEvent);
4609 PINTNETIF pIf = (PINTNETIF)RTHandleTableFreeWithCtx(pIntNet->hHtIfs, hIf, pSession);
4610 if (!pIf)
4614 ASMAtomicWriteU32(&pIf->hIf, INTNET_HANDLE_INVALID);
4620 uint32_t i = pIf->cSleepers;
4623 RTSemEventSignal(pIf->hRecvEvent);
4626 RTSemEventSignal(pIf->hRecvEvent);
4631 void *pvObj = pIf->pvObj;
4632 intnetR0IfRelease(pIf, pSession); /* (RTHandleTableFreeWithCtx) */
4665 PINTNETIF pIf = (PINTNETIF)pvUser1;
4667 Log(("intnetR0IfDestruct: pvObj=%p pIf=%p pIntNet=%p hIf=%RX32\n", pvObj, pIf, pIntNet, pIf->hIf));
4676 ASMAtomicWriteBool(&pIf->fDestroying, true);
4682 INTNETIFHANDLE hIf = ASMAtomicXchgU32(&pIf->hIf, INTNET_HANDLE_INVALID);
4685 void *pvObj2 = RTHandleTableFreeWithCtx(pIntNet->hHtIfs, hIf, pIf->pSession); NOREF(pvObj2);
4686 AssertMsg(pvObj2 == pIf, ("%p, %p, hIf=%RX32 pSession=%p\n", pvObj2, pIf, hIf, pIf->pSession));
4693 PINTNETNETWORK pNetwork = pIf->pNetwork;
4697 intnetR0NetworkSetIfActive(pNetwork, pIf, false /*fActive*/);
4704 if (pNetwork->MacTab.paEntries[iIf].pIf == pIf)
4724 if (pIf->fOpenFlags & INTNET_OPEN_FLAGS_REQUIRE_AS_RESTRICTIVE_POLICIES)
4730 PINTNETIF pIf2 = pNetwork->MacTab.paEntries[iIf].pIf;
4744 pTrunk->pIfPort->pfnDisconnectInterface(pTrunk->pIfPort, pIf->pvIfData);
4747 intnetR0BusyWait(pNetwork, &pIf->cBusy);
4751 pIf->pNetwork = NULL;
4754 SUPR0ObjRelease(pNetwork->pvObj, pIf->pSession);
4765 if (pIf->hRecvEvent != NIL_RTSEMEVENT)
4767 RTSEMEVENT hRecvEvent = pIf->hRecvEvent;
4769 while (pIf->cSleepers && cMaxWait-- > 0)
4774 if (pIf->cSleepers)
4778 cMaxWait = pIf->cSleepers;
4779 while (pIf->cSleepers && cMaxWait-- > 0)
4787 pIf->hRecvEvent = NIL_RTSEMEVENT;
4793 if (pIf->pIntBuf != pIf->pIntBufDefault)
4801 if (pIf->pIntBufDefault)
4803 SUPR0MemFree(pIf->pSession, (RTHCUINTPTR)pIf->pIntBufDefault);
4804 pIf->pIntBufDefault = NULL;
4805 pIf->pIntBufDefaultR3 = 0;
4806 pIf->pIntBuf = NULL;
4807 pIf->pIntBufR3 = 0;
4813 RTSpinlockDestroy(pIf->hRecvInSpinlock);
4814 pIf->hRecvInSpinlock = NIL_RTSPINLOCK;
4816 RTMemFree(pIf->pDstTab);
4817 pIf->pDstTab = NULL;
4820 intnetR0IfAddrCacheDestroy(&pIf->aAddrCache[i]);
4822 pIf->pvObj = NULL;
4823 RTMemFree(pIf);
4876 PINTNETIF pIf = (PINTNETIF)RTMemAllocZ(sizeof(*pIf));
4877 if (!pIf)
4880 memset(&pIf->MacAddr, 0xff, sizeof(pIf->MacAddr)); /* broadcast */
4881 //pIf->fMacSet = false;
4882 //pIf->fPromiscuousReal = false;
4883 //pIf->fActive = false;
4884 //pIf->fDestroying = false;
4885 pIf->fOpenFlags = fFlags;
4886 //pIf->cYields = 0;
4887 //pIf->pIntBuf = 0;
4888 //pIf->pIntBufR3 = NIL_RTR3PTR;
4889 //pIf->pIntBufDefault = 0;
4890 //pIf->pIntBufDefaultR3 = NIL_RTR3PTR;
4891 pIf->hRecvEvent = NIL_RTSEMEVENT;
4892 //pIf->cSleepers = 0;
4893 pIf->hIf = INTNET_HANDLE_INVALID;
4894 pIf->pNetwork = pNetwork;
4895 pIf->pSession = pSession;
4896 //pIf->pvObj = NULL;
4897 //pIf->aAddrCache = {0};
4898 pIf->hRecvInSpinlock = NIL_RTSPINLOCK;
4899 pIf->cBusy = 0;
4900 //pIf->pDstTab = NULL;
4901 //pIf->pvIfData = NULL;
4904 rc = intnetR0IfAddrCacheInit(&pIf->aAddrCache[i], (INTNETADDRTYPE)i,
4907 rc = intnetR0AllocDstTab(pNetwork->MacTab.cEntriesAllocated, (PINTNETDSTTAB *)&pIf->pDstTab);
4909 rc = RTSemEventCreate((PRTSEMEVENT)&pIf->hRecvEvent);
4911 rc = RTSpinlockCreate(&pIf->hRecvInSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "hRecvInSpinlock");
4920 const unsigned cbBuf = RT_ALIGN(sizeof(*pIf->pIntBuf), INTNETRINGBUF_ALIGNMENT) + cbRecv + cbSend;
4921 rc = SUPR0MemAlloc(pIf->pSession, cbBuf, (PRTR0PTR)&pIf->pIntBufDefault, (PRTR3PTR)&pIf->pIntBufDefaultR3);
4924 ASMMemZero32(pIf->pIntBufDefault, cbBuf); /** @todo I thought I specified these buggers as clearing the memory... */
4926 pIf->pIntBuf = pIf->pIntBufDefault;
4927 pIf->pIntBufR3 = pIf->pIntBufDefaultR3;
4928 IntNetBufInit(pIf->pIntBuf, cbBuf, cbRecv, cbSend);
4933 pIf->pvObj = SUPR0ObjRegister(pSession, SUPDRVOBJTYPE_INTERNAL_NETWORK_INTERFACE,
4934 intnetR0IfDestruct, pIf, pNetwork->pIntNet);
4935 if (pIf->pvObj)
4937 rc = RTHandleTableAllocWithCtx(pNetwork->pIntNet->hHtIfs, pIf, pSession, (uint32_t *)&pIf->hIf);
4949 pNetwork->MacTab.paEntries[iIf].MacAddr = pIf->MacAddr;
4953 pNetwork->MacTab.paEntries[iIf].pIf = pIf;
4956 pIf->pNetwork = pNetwork;
4970 Log(("intnetR0NetworkCreateIf: pfnConnectInterface hIf=%RX32\n", pIf->hIf));
4972 rc = pTrunk->pIfPort->pfnConnectInterface(pTrunk->pIfPort, pIf, &pIf->pvIfData);
4980 *phIf = pIf->hIf;
4982 *phIf, pIf->pIntBufDefault->cbSend, pIf->pIntBufDefault->cbRecv, pIf->pIntBufDefault->cbBuf));
4988 SUPR0ObjRelease(pIf->pvObj, pSession);
4994 SUPR0MemFree(pIf->pSession, (RTHCUINTPTR)pIf->pIntBufDefault);
4995 pIf->pIntBufDefault = NULL;
4996 pIf->pIntBuf = NULL;
5000 RTSpinlockDestroy(pIf->hRecvInSpinlock);
5001 pIf->hRecvInSpinlock = NIL_RTSPINLOCK;
5002 RTSemEventDestroy(pIf->hRecvEvent);
5003 pIf->hRecvEvent = NIL_RTSEMEVENT;
5004 RTMemFree(pIf->pDstTab);
5006 intnetR0IfAddrCacheDestroy(&pIf->aAddrCache[i]);
5007 RTMemFree(pIf);
5657 pNetwork->MacTab.paEntries[iIf].pIf->fActive = false;
5672 intnetR0BusyWait(pNetwork, &pNetwork->MacTab.paEntries[iIf].pIf->cBusy);
5679 PINTNETIF pIf = pNetwork->MacTab.paEntries[iIf - 1].pIf;
5682 intnetR0BusyWait(pNetwork, &pIf->cBusy);
5686 && pIf->cBusy)
5688 pIf->pNetwork = NULL;
5871 PINTNETIF pIf2 = pEntry->pIf;