Lines Matching defs:pDstTab

287     PINTNETDSTTAB volatile  pDstTab;
1482 * @param pDstTab The destination output table.
1486 uint32_t fSrc, PINTNETDSTTAB pDstTab)
1496 pDstTab->fTrunkDst = 0;
1497 pDstTab->pTrunk = 0;
1498 pDstTab->cIfs = 0;
1513 uint32_t iIfDst = pDstTab->cIfs++;
1514 pDstTab->aIfs[iIfDst].pIf = pIf;
1515 pDstTab->aIfs[iIfDst].fReplaceDstMac = fExact;
1539 uint32_t iIfDst = pDstTab->cIfs++;
1540 pDstTab->aIfs[iIfDst].pIf = pIf;
1541 pDstTab->aIfs[iIfDst].fReplaceDstMac = false;
1557 pDstTab->fTrunkDst |= INTNETTRUNKDIR_HOST;
1563 pDstTab->fTrunkDst |= INTNETTRUNKDIR_WIRE;
1564 pDstTab->fTrunkDst &= ~fSrc;
1565 if (pDstTab->fTrunkDst)
1568 pDstTab->pTrunk = pTrunk;
1573 return pDstTab->cIfs
1574 ? (!pDstTab->fTrunkDst ? INTNETSWDECISION_INTNET : INTNETSWDECISION_BROADCAST)
1575 : (!pDstTab->fTrunkDst ? INTNETSWDECISION_DROP : INTNETSWDECISION_TRUNK);
1644 * @param pDstTab The destination output table.
1647 PCRTMAC pDstAddr, PINTNETDSTTAB pDstTab)
1649 AssertPtr(pDstTab);
1658 pDstTab->fTrunkDst = 0;
1659 pDstTab->pTrunk = 0;
1660 pDstTab->cIfs = 0;
1681 uint32_t iIfDst = pDstTab->cIfs++;
1682 pDstTab->aIfs[iIfDst].pIf = pIf;
1683 pDstTab->aIfs[iIfDst].fReplaceDstMac = false;
1705 uint32_t iIfDst = pDstTab->cIfs++;
1706 pDstTab->aIfs[iIfDst].pIf = pIf;
1707 pDstTab->aIfs[iIfDst].fReplaceDstMac = false;
1723 pDstTab->fTrunkDst |= INTNETTRUNKDIR_HOST;
1732 pDstTab->fTrunkDst |= INTNETTRUNKDIR_WIRE;
1735 if (pDstTab->fTrunkDst)
1738 pDstTab->pTrunk = pTrunk;
1743 return pDstTab->cIfs
1744 ? (!pDstTab->fTrunkDst ? INTNETSWDECISION_INTNET : INTNETSWDECISION_BROADCAST)
1745 : (!pDstTab->fTrunkDst ? INTNETSWDECISION_DROP : INTNETSWDECISION_TRUNK);
1757 * @param pDstTab The destination output table.
1760 PINTNETDSTTAB pDstTab)
1762 AssertPtr(pDstTab);
1770 pDstTab->fTrunkDst = 0;
1771 pDstTab->pTrunk = 0;
1772 pDstTab->cIfs = 0;
1783 uint32_t iIfDst = pDstTab->cIfs++;
1784 pDstTab->aIfs[iIfDst].pIf = pIf;
1785 pDstTab->aIfs[iIfDst].fReplaceDstMac = false;
1793 pDstTab->fTrunkDst |= INTNETTRUNKDIR_HOST;
1795 pDstTab->fTrunkDst |= INTNETTRUNKDIR_WIRE;
1796 pDstTab->fTrunkDst &= ~fSrc;
1797 if (pDstTab->fTrunkDst)
1800 pDstTab->pTrunk = pTrunk;
1819 * @param pDstTab The destination output table.
1821 static INTNETSWDECISION intnetR0NetworkSwitchTrunkAndPromisc(PINTNETNETWORK pNetwork, uint32_t fSrc, PINTNETDSTTAB pDstTab)
1831 pDstTab->fTrunkDst = 0;
1832 pDstTab->pTrunk = 0;
1833 pDstTab->cIfs = 0;
1845 uint32_t iIfDst = pDstTab->cIfs++;
1846 pDstTab->aIfs[iIfDst].pIf = pIf;
1847 pDstTab->aIfs[iIfDst].fReplaceDstMac = false;
1854 pDstTab->fTrunkDst |= INTNETTRUNKDIR_HOST;
1856 pDstTab->fTrunkDst |= INTNETTRUNKDIR_WIRE;
1857 pDstTab->fTrunkDst &= ~fSrc;
1858 if (pDstTab->fTrunkDst)
1861 pDstTab->pTrunk = pTrunk;
1866 return !pDstTab->cIfs
1867 ? (!pDstTab->fTrunkDst ? INTNETSWDECISION_DROP : INTNETSWDECISION_TRUNK)
1868 : (!pDstTab->fTrunkDst ? INTNETSWDECISION_INTNET : INTNETSWDECISION_BROADCAST);
1878 * @param pDstTab The destination output table.
1880 static INTNETSWDECISION intnetR0NetworkSwitchTrunk(PINTNETNETWORK pNetwork, uint32_t fSrc, PINTNETDSTTAB pDstTab)
1882 AssertPtr(pDstTab);
1890 pDstTab->fTrunkDst = 0;
1891 pDstTab->pTrunk = 0;
1892 pDstTab->cIfs = 0;
1896 pDstTab->fTrunkDst |= INTNETTRUNKDIR_HOST;
1898 pDstTab->fTrunkDst |= INTNETTRUNKDIR_WIRE;
1899 pDstTab->fTrunkDst &= ~fSrc;
1900 if (pDstTab->fTrunkDst)
1903 pDstTab->pTrunk = pTrunk;
1908 return pDstTab->fTrunkDst ? INTNETSWDECISION_TRUNK : INTNETSWDECISION_DROP;
1921 PINTNETDSTTAB pDstTab;
1922 *ppDstTab = pDstTab = (PINTNETDSTTAB)RTMemAlloc(RT_OFFSETOF(INTNETDSTTAB, aIfs[cEntries]));
1923 if (RT_UNLIKELY(!pDstTab))
1966 PINTNETDSTTAB pOld = pIf->pDstTab;
1968 && ASMAtomicCmpXchgPtr(&pIf->pDstTab, pNew, pOld))
3379 * @param pDstTab The destination table.
3381 DECLINLINE(bool) intnetR0NetworkIsContextOk(PINTNETNETWORK pNetwork, PINTNETIF pIfSender, PCINTNETDSTTAB pDstTab)
3391 uint32_t const fTrunkDst = pDstTab->fTrunkDst;
3396 PINTNETTRUNKIF pTrunk = pDstTab->pTrunk;
3459 * @param pDstTab The destination output table.
3464 PINTNETDSTTAB pDstTab)
3528 return intnetR0NetworkSwitchBroadcast(pNetwork, fSrc, pIfSender, pDstTab);
3542 * @param pDstTab The destination output table.
3545 PRTNETETHERHDR pEthHdr, PINTNETDSTTAB pDstTab)
3559 return intnetR0NetworkSwitchTrunk(pNetwork, INTNETTRUNKDIR_WIRE, pDstTab);
3570 return intnetR0NetworkSwitchTrunk(pNetwork, INTNETTRUNKDIR_WIRE, pDstTab);
3582 return intnetR0NetworkSwitchTrunk(pNetwork, INTNETTRUNKDIR_WIRE, pDstTab);
3596 return intnetR0NetworkSharedMacFixAndSwitchBroadcast(pNetwork, INTNETTRUNKDIR_WIRE, NULL, pSG, pEthHdr, pDstTab);
3604 return intnetR0NetworkSwitchTrunkAndPromisc(pNetwork, INTNETTRUNKDIR_WIRE, pDstTab);
3613 INTNETTRUNKDIR_WIRE, pDstTab);
3634 * @param pDstTab The destination table.
3636 static void intnetR0NetworkReleaseDstTab(PINTNETNETWORK pNetwork, PINTNETDSTTAB pDstTab)
3639 if (pDstTab->fTrunkDst)
3641 PINTNETTRUNKIF pTrunk = pDstTab->pTrunk;
3644 pDstTab->pTrunk = NULL;
3645 pDstTab->fTrunkDst = 0;
3649 uint32_t iIf = pDstTab->cIfs;
3652 PINTNETIF pIf = pDstTab->aIfs[iIf].pIf;
3654 pDstTab->aIfs[iIf].pIf = NULL;
3656 pDstTab->cIfs = 0;
3664 * @param pDstTab The destination table.
3669 static void intnetR0NetworkDeliver(PINTNETNETWORK pNetwork, PINTNETDSTTAB pDstTab, PINTNETSG pSG, PINTNETIF pIfSender)
3675 uint32_t iIf = pDstTab->cIfs;
3678 PINTNETIF pIf = pDstTab->aIfs[iIf].pIf;
3680 pDstTab->aIfs[iIf].fReplaceDstMac ? &pIf->MacAddr: NULL);
3682 pDstTab->aIfs[iIf].pIf = NULL;
3684 pDstTab->cIfs = 0;
3697 if (pDstTab->fTrunkDst)
3699 PINTNETTRUNKIF pTrunk = pDstTab->pTrunk;
3703 intnetR0TrunkIfSend(pTrunk, pNetwork, pIfSender, pDstTab->fTrunkDst, pSG);
3706 pDstTab->pTrunk = NULL;
3707 pDstTab->fTrunkDst = 0;
3725 * @param pDstTab The destination table to use.
3728 PINTNETSG pSG, PINTNETDSTTAB pDstTab)
3792 enmSwDecision = intnetR0NetworkSharedMacFixAndSwitchBroadcast(pNetwork, fSrc, pIfSender, pSG, &EthHdr, pDstTab);
3796 enmSwDecision = intnetR0NetworkSharedMacFixAndSwitchBroadcast(pNetwork, fSrc, pIfSender, pSG, &EthHdr, pDstTab);
3798 enmSwDecision = intnetR0NetworkSharedMacFixAndSwitchUnicast(pNetwork, pSG, &EthHdr, pDstTab);
3801 enmSwDecision = intnetR0NetworkSwitchUnicast(pNetwork, fSrc, pIfSender, &EthHdr.DstMac, pDstTab);
3804 enmSwDecision = intnetR0NetworkSwitchBroadcast(pNetwork, fSrc, pIfSender, pDstTab);
3806 enmSwDecision = intnetR0NetworkSwitchUnicast(pNetwork, fSrc, pIfSender, &EthHdr.DstMac, pDstTab);
3813 if (intnetR0NetworkIsContextOk(pNetwork, pIfSender, pDstTab))
3814 intnetR0NetworkDeliver(pNetwork, pDstTab, pSG, pIfSender);
3817 intnetR0NetworkReleaseDstTab(pNetwork, pDstTab);
3868 PINTNETDSTTAB pDstTab = ASMAtomicXchgPtrT(&pIf->pDstTab, NULL, PINTNETDSTTAB);
3869 if (RT_LIKELY(pDstTab))
3889 enmSwDecision = intnetR0NetworkSend(pNetwork, pIf, 0 /*fSrc*/, &Sg, pDstTab);
3902 enmSwDecision = intnetR0NetworkSend(pNetwork, pIf, 0 /*fSrc*/, &Sg, pDstTab);
3930 Assert(!pIf->pDstTab);
3931 ASMAtomicWritePtr(&pIf->pDstTab, pDstTab);
4816 RTMemFree(pIf->pDstTab);
4817 pIf->pDstTab = NULL;
4900 //pIf->pDstTab = NULL;
4907 rc = intnetR0AllocDstTab(pNetwork->MacTab.cEntriesAllocated, (PINTNETDSTTAB *)&pIf->pDstTab);
5004 RTMemFree(pIf->pDstTab);
5229 PINTNETDSTTAB pDstTab = NULL;
5236 pDstTab = pThis->apIntDstTabs[iDstTab];
5237 if (RT_LIKELY(pDstTab))
5244 pDstTab = pThis->apIntDstTabs[iDstTab];
5245 if (pDstTab)
5253 Assert(!pDstTab || iDstTab < pThis->cIntDstTabs);
5259 pDstTab = pThis->apIntDstTabs[iDstTab = 0];
5260 if (!pDstTab)
5261 pDstTab = pThis->apIntDstTabs[iDstTab = 1];
5262 if (pDstTab)
5271 intnetR0AllocDstTab(pNetwork->MacTab.cEntriesAllocated, &pDstTab);
5275 if (RT_LIKELY(pDstTab))
5280 INTNETSWDECISION enmSwDecision = intnetR0NetworkSend(pNetwork, NULL, fSrc, pSG, pDstTab);
5281 AssertMsg(enmSwDecision != INTNETSWDECISION_BAD_CONTEXT, ("fSrc=%#x fTrunkDst=%#x hdr=%.14Rhxs\n", fSrc, pDstTab->fTrunkDst, pSG->aSegs[0].pv));
5289 RTMemFree(pDstTab);
5294 pThis->apIntDstTabs[iDstTab] = pDstTab;
5296 pThis->apTaskDstTabs[iDstTab] = pDstTab;
5305 papDstTabs[iDstTab] = pDstTab;