Lines Matching defs:pIfNet

147 #define VBOX_GET_PCOUNT(pIfNet) ( *(int *)((uintptr_t)pIfNet + g_offIfNetPCount) )
156 * Change the promiscuous setting and try spot the changed in @a pIfNet.
159 * @param pIfNet The interface we're attaching to.
164 static unsigned vboxNetFltDarwinSetAndDiff(ifnet_t pIfNet, int iPromisc)
167 memcpy(aiSavedState, pIfNet, sizeof(aiSavedState));
169 ifnet_set_promiscuous(pIfNet, iPromisc);
179 if (((int*)pIfNet)[i] - aiSavedState[i] == iDiff)
189 * @param pIfNet The interface we're attaching to.
191 static void vboxNetFltDarwinDetectPCountOffset(ifnet_t pIfNet)
204 offTry1 = vboxNetFltDarwinSetAndDiff(pIfNet, 1);
205 offTry2 = vboxNetFltDarwinSetAndDiff(pIfNet, 1);
206 offTry3 = vboxNetFltDarwinSetAndDiff(pIfNet, 0);
207 offTry4 = vboxNetFltDarwinSetAndDiff(pIfNet, 0);
309 ifnet_t pIfNet = NULL;
317 pIfNet = ASMAtomicUoReadPtrT(&pThis->u.s.pIfNet, ifnet_t);
318 if (pIfNet)
319 ifnet_reference(pIfNet);
323 return pIfNet;
332 * @param pIfNet The vboxNetFltDarwinRetainIfNet return value, NULL is fine.
334 DECLINLINE(void) vboxNetFltDarwinReleaseIfNet(PVBOXNETFLTINS pThis, ifnet_t pIfNet)
337 if (pIfNet)
338 ifnet_release(pIfNet);
695 ifnet_t pIfNet = vboxNetFltDarwinRetainIfNet(pThis);
696 if (pIfNet)
699 uint16_t fIf = ifnet_flags(pIfNet);
700 unsigned cPromisc = VBOX_GET_PCOUNT(pIfNet);
702 vboxNetFltDarwinReleaseIfNet(pThis, pIfNet);
717 static void vboxNetFltDarwinIffDetached(void *pvThis, ifnet_t pIfNet)
722 pThis, NanoTS, VALID_PTR(pIfNet) ? VBOX_GET_PCOUNT(pIfNet) : -1));
732 ifnet_set_promiscuous(pIfNet, 0);
740 pIfNet = ASMAtomicUoReadPtrT(&pThis->u.s.pIfNet, ifnet_t);
741 int cPromisc = VALID_PTR(pIfNet) ? VBOX_GET_PCOUNT(pIfNet) : - 1;
743 ASMAtomicUoWriteNullPtr(&pThis->u.s.pIfNet);
753 if (pIfNet)
754 ifnet_release(pIfNet);
763 static errno_t vboxNetFltDarwinIffIoCtl(void *pvThis, ifnet_t pIfNet, protocol_family_t eProtocol, u_long uCmd, void *pvArg)
792 static void vboxNetFltDarwinIffEvent(void *pvThis, ifnet_t pIfNet, protocol_family_t eProtocol, const struct kev_msg *pEvMsg)
798 NOREF(pIfNet);
811 if (pThis->u.s.pIfNet == pIfNet)
818 errno_t err = ifnet_set_promiscuous(pIfNet, 1);
823 Log(("vboxNetFltDarwinIffEvent: enabled promiscuous mode on %s (%d)\n", pThis->szName, VBOX_GET_PCOUNT(pIfNet)));
826 Log(("vboxNetFltDarwinIffEvent: ifnet_set_promiscuous failed on %s, err=%d (%d)\n", pThis->szName, err, VBOX_GET_PCOUNT(pIfNet)));
829 && !(ifnet_flags(pIfNet) & IFF_PROMISC))
832 errno_t err = ifnet_set_flags(pIfNet, IFF_PROMISC, IFF_PROMISC);
834 err = ifnet_ioctl(pIfNet, 0, SIOCSIFFLAGS, NULL);
835 if (!err && (ifnet_flags(pIfNet) & IFF_PROMISC))
836 Log(("vboxNetFltDarwinIffEvent: fixed IFF_PROMISC on %s (%d)\n", pThis->szName, VBOX_GET_PCOUNT(pIfNet)));
839 pThis->szName, err, ifnet_flags(pIfNet), VBOX_GET_PCOUNT(pIfNet)));
842 Log(("vboxNetFltDarwinIffEvent: online, '%s'. flags=%#x (%d)\n", pThis->szName, ifnet_flags(pIfNet), VBOX_GET_PCOUNT(pIfNet)));
845 Log(("vboxNetFltDarwinIffEvent: %s goes down (%d)\n", pThis->szName, VBOX_GET_PCOUNT(pIfNet)));
850 Log(("vboxNetFltDarwinIffEvent: pThis->u.s.pIfNet=%p pIfNet=%p (%d)\n", pThis->u.s.pIfNet, pIfNet, VALID_PTR(pIfNet) ? VBOX_GET_PCOUNT(pIfNet) : -1));
942 static errno_t vboxNetFltDarwinIffOutput(void *pvThis, ifnet_t pIfNet, protocol_family_t eProtocol, mbuf_t *ppMBuf)
947 NOREF(pIfNet);
957 static errno_t vboxNetFltDarwinIffInput(void *pvThis, ifnet_t pIfNet, protocol_family_t eProtocol, mbuf_t *ppMBuf, char **ppchFrame)
960 NOREF(pIfNet);
969 ifnet_t pIfNet = (ifnet_t)pvUser;
970 return VBoxNetSendDummy(pIfNet);
983 * @param pIfNet Interface to be used to send data.
985 static void vboxNetFltSendDummy(ifnet_t pIfNet)
988 int rc = RTThreadCreate(&hThread, vboxNetFltSendDummyWorker, (void *)pIfNet, 0,
1015 * The pIfNet member is updated before iflt_attach is called and used
1019 ifnet_t pIfNet = NULL;
1020 errno_t err = ifnet_find_by_name(pThis->szName, &pIfNet);
1032 ASMAtomicUoWritePtr(&pThis->u.s.pIfNet, pIfNet);
1036 vboxNetFltDarwinDetectPCountOffset(pIfNet);
1039 vboxNetFltSendDummy(pIfNet);
1044 err = ifnet_lladdr_copy_bytes(pIfNet, &pThis->u.s.MacAddr, sizeof(pThis->u.s.MacAddr));
1060 err = iflt_attach(pIfNet, &RegRec, &pIfFilter);
1064 pIfNet = ASMAtomicUoReadPtrT(&pThis->u.s.pIfNet, ifnet_t);
1065 if (pIfNet && !err)
1069 pIfNet = NULL; /* don't dereference it */
1074 if ( !pIfNet
1087 if (pIfNet)
1088 ifnet_release(pIfNet);
1111 ifnet_t pIfNet = vboxNetFltDarwinRetainIfNet(pThis);
1112 if (pIfNet)
1126 errno_t err = ifnet_output_raw(pIfNet, PF_LINK, pMBuf);
1147 mbuf_pkthdr_setrcvif(pMBuf, pIfNet); /* will crash without this. */
1149 errno_t err = ifnet_input(pIfNet, pMBuf, NULL);
1157 vboxNetFltDarwinReleaseIfNet(pThis, pIfNet);
1166 ifnet_t pIfNet = vboxNetFltDarwinRetainIfNet(pThis);
1167 if (pIfNet)
1177 u_int16_t fIf = ifnet_flags(pIfNet);
1180 ifnet_set_flags(pIfNet, IFF_UP, IFF_UP);
1181 ifnet_ioctl(pIfNet, 0, SIOCSIFFLAGS, NULL);
1193 unsigned const cPromiscBefore = VBOX_GET_PCOUNT(pIfNet);
1204 fIf = ifnet_flags(pIfNet);
1207 err = ifnet_set_flags(pIfNet, IFF_UP, IFF_UP);
1208 errno_t err2 = ifnet_ioctl(pIfNet, 0, SIOCSIFFLAGS, NULL);
1211 fIf = ifnet_flags(pIfNet);
1220 err = ifnet_set_promiscuous(pIfNet, 1);
1227 if (!(ifnet_flags(pIfNet) & IFF_PROMISC))
1229 err = ifnet_set_flags(pIfNet, IFF_PROMISC, IFF_PROMISC);
1231 err = ifnet_ioctl(pIfNet, 0, SIOCSIFFLAGS, NULL);
1233 Log(("vboxNetFlt: fixed IFF_PROMISC on %s (%d->%d)\n", pThis->szName, cPromiscBefore, VBOX_GET_PCOUNT(pIfNet)));
1236 pThis->szName, err, cPromiscBefore, VBOX_GET_PCOUNT(pIfNet)));
1240 Log(("VBoxNetFlt: ifnet_set_promiscuous -> err=%d grr! (%d->%d)\n", err, cPromiscBefore, VBOX_GET_PCOUNT(pIfNet)));
1243 Log(("VBoxNetFlt: Waiting for the link to come up... (%d->%d)\n", cPromiscBefore, VBOX_GET_PCOUNT(pIfNet)));
1245 LogRel(("VBoxNetFlt: Failed to put '%s' into promiscuous mode, err=%d (%d->%d)\n", pThis->szName, err, cPromiscBefore, VBOX_GET_PCOUNT(pIfNet)));
1252 errno_t err = ifnet_set_promiscuous(pIfNet, 0);
1257 fIf = ifnet_flags(pIfNet);
1258 Log(("VBoxNetFlt: fIf=%#x; %d->%d\n", fIf, cPromiscBefore, VBOX_GET_PCOUNT(pIfNet)));
1262 vboxNetFltDarwinReleaseIfNet(pThis, pIfNet);
1311 pThis->u.s.pIfNet = NULL;