Changeset 26305 in vbox for trunk/src/VBox/Devices
- Timestamp:
- Feb 5, 2010 7:00:45 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 57374
- Location:
- trunk/src/VBox/Devices
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DevE1000.cpp
r26300 r26305 835 835 * Device state structure. Holds the current state of device. 836 836 * 837 * @implements PDMINETWORK PORT837 * @implements PDMINETWORKDOWN 838 838 * @implements PDMINETWORKCONFIG 839 839 * @implements PDMILEDPORTS … … 843 843 char szInstance[8]; /**< Instance name, e.g. E1000#1. */ 844 844 PDMIBASE IBase; 845 PDMINETWORK PORT INetworkPort;845 PDMINETWORKDOWN INetworkDown; 846 846 PDMINETWORKCONFIG INetworkConfig; 847 847 PDMILEDPORTS ILeds; /**< LED interface */ 848 848 R3PTRTYPE(PPDMIBASE) pDrvBase; /**< Attached network driver. */ 849 R3PTRTYPE(PPDMINETWORK CONNECTOR) pDrv; /**< Connector of attached network driver. */849 R3PTRTYPE(PPDMINETWORKUP) pDrv; /**< Connector of attached network driver. */ 850 850 R3PTRTYPE(PPDMILEDCONNECTORS) pLedsConnector; 851 851 … … 2833 2833 e1kMutexRelease(pState); 2834 2834 STAM_PROFILE_ADV_START(&pState->StatTransmitSend, a); 2835 int rc = pState->pDrv->pfnSend (pState->pDrv, pFrame, u16FrameLen);2835 int rc = pState->pDrv->pfnSendDeprecated(pState->pDrv, pFrame, u16FrameLen); 2836 2836 STAM_PROFILE_ADV_STOP(&pState->StatTransmitSend, a); 2837 2837 if (rc != VINF_SUCCESS) … … 4104 4104 } 4105 4105 4106 static DECLCALLBACK(int) e1kWaitReceiveAvail(PPDMINETWORK PORTpInterface, RTMSINTERVAL cMillies)4107 { 4108 E1KSTATE *pState = IFACE_TO_STATE(pInterface, INetwork Port);4106 static DECLCALLBACK(int) e1kWaitReceiveAvail(PPDMINETWORKDOWN pInterface, RTMSINTERVAL cMillies) 4107 { 4108 E1KSTATE *pState = IFACE_TO_STATE(pInterface, INetworkDown); 4109 4109 int rc = e1kCanReceive(pState); 4110 4110 … … 4310 4310 * @thread ??? 4311 4311 */ 4312 static DECLCALLBACK(int) e1kReceive(PPDMINETWORK PORTpInterface, const void *pvBuf, size_t cb)4313 { 4314 E1KSTATE *pState = IFACE_TO_STATE(pInterface, INetwork Port);4312 static DECLCALLBACK(int) e1kReceive(PPDMINETWORKDOWN pInterface, const void *pvBuf, size_t cb) 4313 { 4314 E1KSTATE *pState = IFACE_TO_STATE(pInterface, INetworkDown); 4315 4315 int rc = VINF_SUCCESS; 4316 4316 … … 4469 4469 4470 4470 PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASE, &pThis->IBase); 4471 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK PORT, &pThis->INetworkPort);4471 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKDOWN, &pThis->INetworkDown); 4472 4472 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKCONFIG, &pThis->INetworkConfig); 4473 4473 PDMIBASE_RETURN_INTERFACE(pszIID, PDMILEDPORTS, &pThis->ILeds); … … 4798 4798 #endif 4799 4799 } 4800 pState->pDrv = PDMIBASE_QUERY_INTERFACE(pState->pDrvBase, PDMINETWORK CONNECTOR);4801 AssertMsgStmt(pState->pDrv, ("Failed to obtain the PDMINETWORK CONNECTORinterface!\n"),4800 pState->pDrv = PDMIBASE_QUERY_INTERFACE(pState->pDrvBase, PDMINETWORKUP); 4801 AssertMsgStmt(pState->pDrv, ("Failed to obtain the PDMINETWORKUP interface!\n"), 4802 4802 rc = VERR_PDM_MISSING_INTERFACE_BELOW); 4803 4803 } … … 5113 5113 /* Interfaces */ 5114 5114 pState->IBase.pfnQueryInterface = e1kQueryInterface; 5115 pState->INetwork Port.pfnWaitReceiveAvail = e1kWaitReceiveAvail;5116 pState->INetwork Port.pfnReceive = e1kReceive;5115 pState->INetworkDown.pfnWaitReceiveAvail = e1kWaitReceiveAvail; 5116 pState->INetworkDown.pfnReceive = e1kReceive; 5117 5117 pState->ILeds.pfnQueryStatusLed = e1kQueryStatusLed; 5118 5118 pState->INetworkConfig.pfnGetMac = e1kGetMac; … … 5253 5253 N_("A Domain Name Server (DNS) for NAT networking could not be determined. Ensure that your host is correctly connected to an ISP. If you ignore this warning the guest will not be able to perform nameserver lookups and it will probably observe delays if trying so")); 5254 5254 } 5255 pState->pDrv = PDMIBASE_QUERY_INTERFACE(pState->pDrvBase, PDMINETWORK CONNECTOR);5256 AssertMsgReturn(pState->pDrv, ("Failed to obtain the PDMINETWORK CONNECTORinterface!\n"),5255 pState->pDrv = PDMIBASE_QUERY_INTERFACE(pState->pDrvBase, PDMINETWORKUP); 5256 AssertMsgReturn(pState->pDrv, ("Failed to obtain the PDMINETWORKUP interface!\n"), 5257 5257 VERR_PDM_MISSING_INTERFACE_BELOW); 5258 5258 } -
trunk/src/VBox/Devices/Network/DevINIP.cpp
r26300 r26305 71 71 * 72 72 * @implements PDMIBASE 73 * @implements PDMINETWORK PORT73 * @implements PDMINETWORKDOWN 74 74 */ 75 75 typedef struct DEVINTNETIP … … 78 78 PDMIBASE IBase; 79 79 /** The network port this device provides (LUN\#0). */ 80 PDMINETWORK PORT INetworkPort;80 PDMINETWORKDOWN INetworkDown; 81 81 /** The base interface of the network driver below us. */ 82 82 PPDMIBASE pDrvBase; 83 83 /** The connector of the network driver below us. */ 84 PPDMINETWORK CONNECTORpDrv;84 PPDMINETWORKUP pDrv; 85 85 /** Pointer to the device instance. */ 86 86 PPDMDEVINSR3 pDevIns; … … 254 254 } 255 255 if (cbBuf) 256 rc = g_pDevINIPData->pDrv->pfnSend (g_pDevINIPData->pDrv,257 &aFrame[0], cbBuf);256 rc = g_pDevINIPData->pDrv->pfnSendDeprecated(g_pDevINIPData->pDrv, 257 &aFrame[0], cbBuf); 258 258 259 259 #if ETH_PAD_SIZE … … 300 300 * @param cMillies Number of milliseconds to wait. 0 means return immediately. 301 301 */ 302 static DECLCALLBACK(int) devINIPWaitInputAvail(PPDMINETWORK PORTpInterface, RTMSINTERVAL cMillies)302 static DECLCALLBACK(int) devINIPWaitInputAvail(PPDMINETWORKDOWN pInterface, RTMSINTERVAL cMillies) 303 303 { 304 304 LogFlow(("%s: pInterface=%p\n", __FUNCTION__, pInterface)); … … 315 315 * @param cb Frame size. 316 316 */ 317 static DECLCALLBACK(int) devINIPInput(PPDMINETWORK PORTpInterface,317 static DECLCALLBACK(int) devINIPInput(PPDMINETWORKDOWN pInterface, 318 318 const void *pvBuf, size_t cb) 319 319 { … … 400 400 PDEVINTNETIP pThis = RT_FROM_MEMBER(pInterface, DEVINTNETIP, IBase); 401 401 PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASE, &pThis->IBase); 402 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK PORT, &pThis->INetworkPort);402 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKDOWN, &pThis->INetworkDown); 403 403 return NULL; 404 404 } … … 477 477 /* IBase */ 478 478 pThis->IBase.pfnQueryInterface = devINIPQueryInterface; 479 /* INetwork Port*/480 pThis->INetwork Port.pfnWaitReceiveAvail = devINIPWaitInputAvail;481 pThis->INetwork Port.pfnReceive = devINIPInput;479 /* INetworkDown */ 480 pThis->INetworkDown.pfnWaitReceiveAvail = devINIPWaitInputAvail; 481 pThis->INetworkDown.pfnReceive = devINIPInput; 482 482 483 483 /* … … 558 558 else 559 559 { 560 pThis->pDrv = PDMIBASE_QUERY_INTERFACE(pThis->pDrvBase, PDMINETWORK CONNECTOR);560 pThis->pDrv = PDMIBASE_QUERY_INTERFACE(pThis->pDrvBase, PDMINETWORKUP); 561 561 if (!pThis->pDrv) 562 562 { 563 AssertMsgFailed(("Failed to obtain the PDMINETWORK CONNECTORinterface!\n"));563 AssertMsgFailed(("Failed to obtain the PDMINETWORKUP interface!\n")); 564 564 rc = VERR_PDM_MISSING_INTERFACE_BELOW; 565 565 goto out; -
trunk/src/VBox/Devices/Network/DevPCNet.cpp
r26300 r26305 115 115 * @extends PCIDEVICE 116 116 * @implements PDMIBASE 117 * @implements PDMINETWORK PORT117 * @implements PDMINETWORKDOWN 118 118 * @implements PDMINETWORKCONFIG 119 119 * @implements PDMILEDPORTS … … 204 204 PTMTIMERR3 pTimerRestore; 205 205 /** Pointer to the connector of the attached network driver. */ 206 R3PTRTYPE(PPDMINETWORK CONNECTOR) pDrv;206 R3PTRTYPE(PPDMINETWORKUP) pDrv; 207 207 /** Pointer to the attached network driver. */ 208 208 R3PTRTYPE(PPDMIBASE) pDrvBase; … … 210 210 PDMIBASE IBase; 211 211 /** LUN\#0: The network port interface. */ 212 PDMINETWORK PORT INetworkPort;212 PDMINETWORKDOWN INetworkDown; 213 213 /** LUN\#0: The network config port interface. */ 214 214 PDMINETWORKCONFIG INetworkConfig; … … 2164 2164 pThis->Led.Asserted.s.fWriting = pThis->Led.Actual.s.fWriting = 1; 2165 2165 2166 pThis->pDrv->pfnSend (pThis->pDrv, pThis->pvSendFrame, pThis->cbSendFrame);2166 pThis->pDrv->pfnSendDeprecated(pThis->pDrv, pThis->pvSendFrame, pThis->cbSendFrame); 2167 2167 STAM_REL_COUNTER_ADD(&pThis->StatTransmitBytes, pThis->cbSendFrame); 2168 2168 pThis->Led.Actual.s.fWriting = 0; … … 4488 4488 Assert(&pThis->IBase == pInterface); 4489 4489 PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASE, &pThis->IBase); 4490 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK PORT, &pThis->INetworkPort);4490 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKDOWN, &pThis->INetworkDown); 4491 4491 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKCONFIG, &pThis->INetworkConfig); 4492 4492 PDMIBASE_RETURN_INTERFACE(pszIID, PDMILEDPORTS, &pThis->ILeds); … … 4494 4494 } 4495 4495 4496 /** Converts a pointer to PCNetState::INetwork Portto a PCNetState pointer. */4497 #define INETWORKPORT_2_DATA(pInterface) ( (PCNetState *)((uintptr_t)pInterface - RT_OFFSETOF(PCNetState, INetwork Port)) )4496 /** Converts a pointer to PCNetState::INetworkDown to a PCNetState pointer. */ 4497 #define INETWORKPORT_2_DATA(pInterface) ( (PCNetState *)((uintptr_t)pInterface - RT_OFFSETOF(PCNetState, INetworkDown)) ) 4498 4498 4499 4499 … … 4535 4535 * 4536 4536 */ 4537 static DECLCALLBACK(int) pcnetWaitReceiveAvail(PPDMINETWORK PORTpInterface, RTMSINTERVAL cMillies)4537 static DECLCALLBACK(int) pcnetWaitReceiveAvail(PPDMINETWORKDOWN pInterface, RTMSINTERVAL cMillies) 4538 4538 { 4539 4539 PCNetState *pThis = INETWORKPORT_2_DATA(pInterface); … … 4583 4583 * @thread EMT 4584 4584 */ 4585 static DECLCALLBACK(int) pcnetReceive(PPDMINETWORK PORTpInterface, const void *pvBuf, size_t cb)4585 static DECLCALLBACK(int) pcnetReceive(PPDMINETWORKDOWN pInterface, const void *pvBuf, size_t cb) 4586 4586 { 4587 4587 PCNetState *pThis = INETWORKPORT_2_DATA(pInterface); … … 4820 4820 #endif 4821 4821 } 4822 pThis->pDrv = PDMIBASE_QUERY_INTERFACE(pThis->pDrvBase, PDMINETWORK CONNECTOR);4823 AssertMsgStmt(pThis->pDrv, ("Failed to obtain the PDMINETWORK CONNECTORinterface!\n"),4822 pThis->pDrv = PDMIBASE_QUERY_INTERFACE(pThis->pDrvBase, PDMINETWORKUP); 4823 AssertMsgStmt(pThis->pDrv, ("Failed to obtain the PDMINETWORKUP interface!\n"), 4824 4824 rc = VERR_PDM_MISSING_INTERFACE_BELOW); 4825 4825 } … … 5010 5010 pThis->IBase.pfnQueryInterface = pcnetQueryInterface; 5011 5011 /* INeworkPort */ 5012 pThis->INetwork Port.pfnWaitReceiveAvail = pcnetWaitReceiveAvail;5013 pThis->INetwork Port.pfnReceive = pcnetReceive;5012 pThis->INetworkDown.pfnWaitReceiveAvail = pcnetWaitReceiveAvail; 5013 pThis->INetworkDown.pfnReceive = pcnetReceive; 5014 5014 /* INetworkConfig */ 5015 5015 pThis->INetworkConfig.pfnGetMac = pcnetGetMac; … … 5201 5201 #endif 5202 5202 } 5203 pThis->pDrv = PDMIBASE_QUERY_INTERFACE(pThis->pDrvBase, PDMINETWORK CONNECTOR);5204 AssertMsgReturn(pThis->pDrv, ("Failed to obtain the PDMINETWORK CONNECTORinterface!\n"),5203 pThis->pDrv = PDMIBASE_QUERY_INTERFACE(pThis->pDrvBase, PDMINETWORKUP); 5204 AssertMsgReturn(pThis->pDrv, ("Failed to obtain the PDMINETWORKUP interface!\n"), 5205 5205 VERR_PDM_MISSING_INTERFACE_BELOW); 5206 5206 } -
trunk/src/VBox/Devices/Network/DevVirtioNet.cpp
r26300 r26305 110 110 * 111 111 * @extends VPCISTATE 112 * @implements PDMINETWORK PORT112 * @implements PDMINETWORKDOWN 113 113 * @implements PDMINETWORKCONFIG 114 114 */ … … 120 120 // PDMCRITSECT csRx; /**< Protects RX queue. */ 121 121 122 PDMINETWORK PORT INetworkPort;122 PDMINETWORKDOWN INetworkDown; 123 123 PDMINETWORKCONFIG INetworkConfig; 124 124 R3PTRTYPE(PPDMIBASE) pDrvBase; /**< Attached network driver. */ 125 R3PTRTYPE(PPDMINETWORK CONNECTOR) pDrv; /**< Connector of attached network driver. */125 R3PTRTYPE(PPDMINETWORKUP) pDrv; /**< Connector of attached network driver. */ 126 126 127 127 R3PTRTYPE(PPDMQUEUE) pCanRxQueueR3; /**< Rx wakeup signaller - R3. */ … … 546 546 } 547 547 548 static DECLCALLBACK(int) vnetWaitReceiveAvail(PPDMINETWORK PORTpInterface, RTMSINTERVAL cMillies)549 { 550 VNETSTATE *pState = IFACE_TO_STATE(pInterface, INetwork Port);548 static DECLCALLBACK(int) vnetWaitReceiveAvail(PPDMINETWORKDOWN pInterface, RTMSINTERVAL cMillies) 549 { 550 VNETSTATE *pState = IFACE_TO_STATE(pInterface, INetworkDown); 551 551 LogFlow(("%s vnetWaitReceiveAvail(cMillies=%u)\n", INSTANCE(pState), cMillies)); 552 552 int rc = vnetCanReceive(pState); … … 591 591 Assert(&pThis->VPCI.IBase == pInterface); 592 592 593 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK PORT, &pThis->INetworkPort);593 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKDOWN, &pThis->INetworkDown); 594 594 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKCONFIG, &pThis->INetworkConfig); 595 595 return vpciQueryInterface(pInterface, pszIID); … … 733 733 * @thread RX 734 734 */ 735 static DECLCALLBACK(int) vnetReceive(PPDMINETWORK PORTpInterface, const void *pvBuf, size_t cb)736 { 737 VNETSTATE *pState = IFACE_TO_STATE(pInterface, INetwork Port);735 static DECLCALLBACK(int) vnetReceive(PPDMINETWORKDOWN pInterface, const void *pvBuf, size_t cb) 736 { 737 VNETSTATE *pState = IFACE_TO_STATE(pInterface, INetworkDown); 738 738 739 739 Log2(("%s vnetReceive: pvBuf=%p cb=%u\n", INSTANCE(pState), pvBuf, cb)); … … 890 890 891 891 STAM_PROFILE_START(&pState->StatTransmitSend, a); 892 int rc = pState->pDrv->pfnSend (pState->pDrv, pState->pTxBuf, uOffset);892 int rc = pState->pDrv->pfnSendDeprecated(pState->pDrv, pState->pTxBuf, uOffset); 893 893 STAM_PROFILE_STOP(&pState->StatTransmitSend, a); 894 894 STAM_REL_COUNTER_ADD(&pState->StatTransmitBytes, uOffset); … … 1516 1516 #endif 1517 1517 } 1518 pState->pDrv = PDMIBASE_QUERY_INTERFACE(pState->pDrvBase, PDMINETWORK CONNECTOR);1519 AssertMsgStmt(pState->pDrv, ("Failed to obtain the PDMINETWORK CONNECTORinterface!\n"),1518 pState->pDrv = PDMIBASE_QUERY_INTERFACE(pState->pDrvBase, PDMINETWORKUP); 1519 AssertMsgStmt(pState->pDrv, ("Failed to obtain the PDMINETWORKUP interface!\n"), 1520 1520 rc = VERR_PDM_MISSING_INTERFACE_BELOW); 1521 1521 } … … 1667 1667 1668 1668 /* Interfaces */ 1669 pState->INetwork Port.pfnWaitReceiveAvail = vnetWaitReceiveAvail;1670 pState->INetwork Port.pfnReceive = vnetReceive;1669 pState->INetworkDown.pfnWaitReceiveAvail = vnetWaitReceiveAvail; 1670 pState->INetworkDown.pfnReceive = vnetReceive; 1671 1671 pState->INetworkConfig.pfnGetMac = vnetGetMac; 1672 1672 pState->INetworkConfig.pfnGetLinkState = vnetGetLinkState; … … 1737 1737 N_("A Domain Name Server (DNS) for NAT networking could not be determined. Ensure that your host is correctly connected to an ISP. If you ignore this warning the guest will not be able to perform nameserver lookups and it will probably observe delays if trying so")); 1738 1738 } 1739 pState->pDrv = PDMIBASE_QUERY_INTERFACE(pState->pDrvBase, PDMINETWORK CONNECTOR);1740 AssertMsgReturn(pState->pDrv, ("Failed to obtain the PDMINETWORK CONNECTORinterface!\n"),1739 pState->pDrv = PDMIBASE_QUERY_INTERFACE(pState->pDrvBase, PDMINETWORKUP); 1740 AssertMsgReturn(pState->pDrv, ("Failed to obtain the PDMINETWORKUP interface!\n"), 1741 1741 VERR_PDM_MISSING_INTERFACE_BELOW); 1742 1742 } -
trunk/src/VBox/Devices/Network/DrvIntNet.cpp
r26300 r26305 66 66 * Internal networking driver instance data. 67 67 * 68 * @implements PDMINETWORK CONNECTOR68 * @implements PDMINETWORKUP 69 69 */ 70 70 typedef struct DRVINTNET 71 71 { 72 72 /** The network interface. */ 73 PDMINETWORK CONNECTOR INetworkConnectorR3;73 PDMINETWORKUP INetworkUpR3; 74 74 /** The network interface. */ 75 R3PTRTYPE(PPDMINETWORK PORT) pIPortR3;75 R3PTRTYPE(PPDMINETWORKDOWN) pIAboveNet; 76 76 /** The network config interface. 77 77 * Can (in theory at least) be NULL. */ 78 R3PTRTYPE(PPDMINETWORKCONFIG) pI ConfigIfR3;78 R3PTRTYPE(PPDMINETWORKCONFIG) pIAboveConfigR3; 79 79 /** Pointer to the driver instance. */ 80 80 PPDMDRVINSR3 pDrvInsR3; … … 125 125 #ifdef IN_RING3 126 126 127 /* -=-=-=-=- PDMINETWORK CONNECTOR-=-=-=-=- */128 129 /** Converts a pointer to DRVINTNET::INetwork ConnectorR3 to a PDRVINTNET. */130 #define PDMINETWORK CONNECTOR_2_DRVINTNET(pInterface) \131 RT_FROM_MEMBER(pInterface, DRVINTNET, INetwork ConnectorR3)127 /* -=-=-=-=- PDMINETWORKUP -=-=-=-=- */ 128 129 /** Converts a pointer to DRVINTNET::INetworkUpR3 to a PDRVINTNET. */ 130 #define PDMINETWORKUP_2_DRVINTNET(pInterface) \ 131 RT_FROM_MEMBER(pInterface, DRVINTNET, INetworkUpR3) 132 132 133 133 /** … … 139 139 static int drvR3IntNetUpdateMacAddress(PDRVINTNET pThis) 140 140 { 141 if (!pThis->pI ConfigIfR3)141 if (!pThis->pIAboveConfigR3) 142 142 return VINF_SUCCESS; 143 143 … … 147 147 SetMacAddressReq.pSession = NIL_RTR0PTR; 148 148 SetMacAddressReq.hIf = pThis->hIf; 149 int rc = pThis->pI ConfigIfR3->pfnGetMac(pThis->pIConfigIfR3, &SetMacAddressReq.Mac);149 int rc = pThis->pIAboveConfigR3->pfnGetMac(pThis->pIAboveConfigR3, &SetMacAddressReq.Mac); 150 150 if (RT_SUCCESS(rc)) 151 151 rc = PDMDrvHlpSUPCallVMMR0Ex(pThis->pDrvInsR3, VMMR0_DO_INTNET_IF_SET_MAC_ADDRESS, … … 168 168 static int drvR3IntNetSetActive(PDRVINTNET pThis, bool fActive) 169 169 { 170 if (!pThis->pI ConfigIfR3)170 if (!pThis->pIAboveConfigR3) 171 171 return VINF_SUCCESS; 172 172 … … 280 280 281 281 /** 282 * Send data to the network. 283 * 284 * @returns VBox status code. 285 * @param pInterface Pointer to the interface structure containing the called function pointer. 286 * @param pvBuf Data to send. 287 * @param cb Number of bytes to send. 288 * @thread EMT 289 */ 290 static DECLCALLBACK(int) drvR3IntNetSend(PPDMINETWORKCONNECTOR pInterface, const void *pvBuf, size_t cb) 291 { 292 PDRVINTNET pThis = PDMINETWORKCONNECTOR_2_DRVINTNET(pInterface); 282 * @interface_method_impl{PDMINETWORKUP,pfnSendDeprecated} 283 */ 284 static DECLCALLBACK(int) drvR3IntNetSendDeprecated(PPDMINETWORKUP pInterface, const void *pvBuf, size_t cb) 285 { 286 PDRVINTNET pThis = PDMINETWORKUP_2_DRVINTNET(pInterface); 293 287 STAM_PROFILE_START(&pThis->StatTransmit, a); 294 288 … … 337 331 338 332 /** 339 * Set promiscuous mode. 340 * 341 * This is called when the promiscuous mode is set. This means that there doesn't have 342 * to be a mode change when it's called. 343 * 344 * @param pInterface Pointer to the interface structure containing the called function pointer. 345 * @param fPromiscuous Set if the adaptor is now in promiscuous mode. Clear if it is not. 346 * @thread EMT 347 */ 348 static DECLCALLBACK(void) drvR3IntNetSetPromiscuousMode(PPDMINETWORKCONNECTOR pInterface, bool fPromiscuous) 349 { 350 PDRVINTNET pThis = PDMINETWORKCONNECTOR_2_DRVINTNET(pInterface); 333 * @interface_method_impl{PDMINETWORKUP,pfnSetPromiscuousMode} 334 */ 335 static DECLCALLBACK(void) drvR3IntNetSetPromiscuousMode(PPDMINETWORKUP pInterface, bool fPromiscuous) 336 { 337 PDRVINTNET pThis = PDMINETWORKUP_2_DRVINTNET(pInterface); 351 338 INTNETIFSETPROMISCUOUSMODEREQ Req; 352 339 Req.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; … … 362 349 363 350 /** 364 * Notification on link status changes. 365 * 366 * @param pInterface Pointer to the interface structure containing the called function pointer. 367 * @param enmLinkState The new link state. 368 * @thread EMT 369 */ 370 static DECLCALLBACK(void) drvR3IntNetNotifyLinkChanged(PPDMINETWORKCONNECTOR pInterface, PDMNETWORKLINKSTATE enmLinkState) 371 { 372 PDRVINTNET pThis = PDMINETWORKCONNECTOR_2_DRVINTNET(pInterface); 351 * @interface_method_impl{PDMINETWORKUP,pfnNotifyLinkChanged} 352 */ 353 static DECLCALLBACK(void) drvR3IntNetNotifyLinkChanged(PPDMINETWORKUP pInterface, PDMNETWORKLINKSTATE enmLinkState) 354 { 355 PDRVINTNET pThis = PDMINETWORKUP_2_DRVINTNET(pInterface); 373 356 bool fLinkDown; 374 357 switch (enmLinkState) … … 401 384 LogFlow(("drvR3IntNetAsyncIoWaitForSpace:\n")); 402 385 STAM_PROFILE_ADV_STOP(&pThis->StatReceive, a); 403 int rc = pThis->pI PortR3->pfnWaitReceiveAvail(pThis->pIPortR3, RT_INDEFINITE_WAIT);386 int rc = pThis->pIAboveNet->pfnWaitReceiveAvail(pThis->pIAboveNet, RT_INDEFINITE_WAIT); 404 387 STAM_PROFILE_ADV_START(&pThis->StatReceive, a); 405 388 LogFlow(("drvR3IntNetAsyncIoWaitForSpace: returns %Rrc\n", rc)); … … 452 435 */ 453 436 size_t cbFrame = pHdr->cbFrame; 454 int rc = pThis->pI PortR3->pfnWaitReceiveAvail(pThis->pIPortR3, 0);437 int rc = pThis->pIAboveNet->pfnWaitReceiveAvail(pThis->pIAboveNet, 0); 455 438 if (rc == VINF_SUCCESS) 456 439 { … … 464 447 cbFrame, cbFrame, INTNETHdrGetFramePtr(pHdr, pBuf))); 465 448 #endif 466 rc = pThis->pI PortR3->pfnReceive(pThis->pIPortR3, INTNETHdrGetFramePtr(pHdr, pBuf), cbFrame);449 rc = pThis->pIAboveNet->pfnReceive(pThis->pIAboveNet, INTNETHdrGetFramePtr(pHdr, pBuf), cbFrame); 467 450 AssertRC(rc); 468 451 … … 629 612 PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASER0, &pThis->IBaseR0); 630 613 PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASERC, &pThis->IBaseRC); 631 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK CONNECTOR, &pThis->INetworkConnectorR3);614 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKUP, &pThis->INetworkUpR3); 632 615 return NULL; 633 616 } … … 669 652 } 670 653 if ( PDMDrvHlpVMTeleportedAndNotFullyResumedYet(pDrvIns) 671 && pThis->pI ConfigIfR3)654 && pThis->pIAboveConfigR3) 672 655 { 673 656 /* … … 688 671 Frame.Hdr.DstMac.au16[2] = 0xffff; 689 672 Frame.Hdr.EtherType = RT_H2BE_U16(0x801e); 690 int rc = pThis->pI ConfigIfR3->pfnGetMac(pThis->pIConfigIfR3, &Frame.Hdr.SrcMac);673 int rc = pThis->pIAboveConfigR3->pfnGetMac(pThis->pIAboveConfigR3, &Frame.Hdr.SrcMac); 691 674 if (RT_SUCCESS(rc)) 692 rc = drvR3IntNetSend (&pThis->INetworkConnectorR3, &Frame, sizeof(Frame));675 rc = drvR3IntNetSendDeprecated(&pThis->INetworkUpR3, &Frame, sizeof(Frame)); 693 676 if (RT_FAILURE(rc)) 694 677 LogRel(("IntNet#%u: Sending dummy frame failed: %Rrc\n", pDrvIns->iInstance, rc)); … … 828 811 pThis->IBaseR0.pfnQueryInterface = drvR3IntNetIBaseR0_QueryInterface; 829 812 pThis->IBaseRC.pfnQueryInterface = drvR3IntNetIBaseRC_QueryInterface; 830 /* INetwork */831 pThis->INetwork ConnectorR3.pfnSend = drvR3IntNetSend;832 pThis->INetwork ConnectorR3.pfnSetPromiscuousMode= drvR3IntNetSetPromiscuousMode;833 pThis->INetwork ConnectorR3.pfnNotifyLinkChanged= drvR3IntNetNotifyLinkChanged;813 /* INetworkUp */ 814 pThis->INetworkUpR3.pfnSendDeprecated = drvR3IntNetSendDeprecated; 815 pThis->INetworkUpR3.pfnSetPromiscuousMode = drvR3IntNetSetPromiscuousMode; 816 pThis->INetworkUpR3.pfnNotifyLinkChanged = drvR3IntNetNotifyLinkChanged; 834 817 835 818 /* … … 865 848 * Query the network port interface. 866 849 */ 867 pThis->pI PortR3 = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKPORT);868 if (!pThis->pI PortR3)850 pThis->pIAboveNet = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKDOWN); 851 if (!pThis->pIAboveNet) 869 852 { 870 853 AssertMsgFailed(("Configuration error: the above device/driver didn't export the network port interface!\n")); 871 854 return VERR_PDM_MISSING_INTERFACE_ABOVE; 872 855 } 873 pThis->pI ConfigIfR3 = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKCONFIG);856 pThis->pIAboveConfigR3 = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKCONFIG); 874 857 875 858 /* -
trunk/src/VBox/Devices/Network/DrvNAT.cpp
r26300 r26305 121 121 * NAT network transport driver instance data. 122 122 * 123 * @implements PDMINETWORK CONNECTOR123 * @implements PDMINETWORKUP 124 124 */ 125 125 typedef struct DRVNAT 126 126 { 127 127 /** The network interface. */ 128 PDMINETWORK CONNECTOR INetworkConnector;128 PDMINETWORKUP INetworkUp; 129 129 /** The port we're attached to. */ 130 PPDMINETWORK PORT pPort;130 PPDMINETWORKDOWN pIAboveNet; 131 131 /** The network config of the port we're attached to. */ 132 PPDMINETWORKCONFIG p Config;132 PPDMINETWORKCONFIG pIAboveConfig; 133 133 /** Pointer to the driver instance. */ 134 134 PPDMDRVINS pDrvIns; … … 217 217 218 218 219 /** Converts a pointer to NAT::INetwork Connectorto a PRDVNAT. */220 #define PDMINETWORK CONNECTOR_2_DRVNAT(pInterface) ( (PDRVNAT)((uintptr_t)pInterface - RT_OFFSETOF(DRVNAT, INetworkConnector)) )219 /** Converts a pointer to NAT::INetworkUp to a PRDVNAT. */ 220 #define PDMINETWORKUP_2_DRVNAT(pInterface) ( (PDRVNAT)((uintptr_t)pInterface - RT_OFFSETOF(DRVNAT, INetworkUp)) ) 221 221 222 222 static DECLCALLBACK(void) drvNATSlowTimer(PPDMDRVINS pDrvIns, PTMTIMER pTimer, void *pvUser) … … 293 293 int rc = RTCritSectEnter(&pThis->csDevAccess); 294 294 AssertRC(rc); 295 rc = pThis->p Port->pfnWaitReceiveAvail(pThis->pPort, RT_INDEFINITE_WAIT);295 rc = pThis->pIAboveNet->pfnWaitReceiveAvail(pThis->pIAboveNet, RT_INDEFINITE_WAIT); 296 296 if (RT_SUCCESS(rc)) 297 297 { 298 rc = pThis->p Port->pfnReceive(pThis->pPort, pu8Buf, cb);298 rc = pThis->pIAboveNet->pfnReceive(pThis->pIAboveNet, pu8Buf, cb); 299 299 AssertRC(rc); 300 300 } … … 336 336 rc = RTCritSectEnter(&pThis->csDevAccess); 337 337 338 rc = pThis->p Port->pfnWaitReceiveAvail(pThis->pPort, RT_INDEFINITE_WAIT);338 rc = pThis->pIAboveNet->pfnWaitReceiveAvail(pThis->pIAboveNet, RT_INDEFINITE_WAIT); 339 339 if (RT_SUCCESS(rc)) 340 340 { 341 rc = pThis->p Port->pfnReceive(pThis->pPort, pu8Buf, cb);341 rc = pThis->pIAboveNet->pfnReceive(pThis->pIAboveNet, pu8Buf, cb); 342 342 AssertRC(rc); 343 343 } … … 374 374 375 375 /** 376 * Called by the guest to send data to the network. 377 * 378 * @returns VBox status code. 379 * @param pInterface Pointer to the interface structure containing the called function pointer. 380 * @param pvBuf Data to send. 381 * @param cb Number of bytes to send. 382 * @thread EMT 383 */ 384 static DECLCALLBACK(int) drvNATSend(PPDMINETWORKCONNECTOR pInterface, const void *pvBuf, size_t cb) 385 { 386 PDRVNAT pThis = PDMINETWORKCONNECTOR_2_DRVNAT(pInterface); 376 * @interface_method_impl{PDMINETWORKUP,pfnSendDeprecated} 377 */ 378 static DECLCALLBACK(int) drvNATSendDeprecated(PPDMINETWORKUP pInterface, const void *pvBuf, size_t cb) 379 { 380 PDRVNAT pThis = PDMINETWORKUP_2_DRVNAT(pInterface); 387 381 388 382 LogFlow(("drvNATSend: pvBuf=%p cb=%#x\n", pvBuf, cb)); … … 451 445 452 446 /** 453 * Set promiscuous mode. 454 * 455 * This is called when the promiscuous mode is set. This means that there doesn't have 456 * to be a mode change when it's called. 457 * 458 * @param pInterface Pointer to the interface structure containing the called function pointer. 459 * @param fPromiscuous Set if the adaptor is now in promiscuous mode. Clear if it is not. 460 * @thread EMT 461 */ 462 static DECLCALLBACK(void) drvNATSetPromiscuousMode(PPDMINETWORKCONNECTOR pInterface, bool fPromiscuous) 447 * @interface_method_impl{PDMINETWORKUP,pfnSetPromiscuousMode} 448 */ 449 static DECLCALLBACK(void) drvNATSetPromiscuousMode(PPDMINETWORKUP pInterface, bool fPromiscuous) 463 450 { 464 451 LogFlow(("drvNATSetPromiscuousMode: fPromiscuous=%d\n", fPromiscuous)); … … 500 487 * @thread EMT 501 488 */ 502 static DECLCALLBACK(void) drvNATNotifyLinkChanged(PPDMINETWORK CONNECTORpInterface, PDMNETWORKLINKSTATE enmLinkState)503 { 504 PDRVNAT pThis = PDMINETWORK CONNECTOR_2_DRVNAT(pInterface);489 static DECLCALLBACK(void) drvNATNotifyLinkChanged(PPDMINETWORKUP pInterface, PDMNETWORKLINKSTATE enmLinkState) 490 { 491 PDRVNAT pThis = PDMINETWORKUP_2_DRVNAT(pInterface); 505 492 506 493 LogFlow(("drvNATNotifyLinkChanged: enmLinkState=%d\n", enmLinkState)); … … 815 802 816 803 PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASE, &pDrvIns->IBase); 817 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK CONNECTOR, &pThis->INetworkConnector);804 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKUP, &pThis->INetworkUp); 818 805 return NULL; 819 806 } … … 827 814 static void drvNATSetMac(PDRVNAT pThis) 828 815 { 829 if (pThis->p Config)816 if (pThis->pIAboveConfig) 830 817 { 831 818 RTMAC Mac; 832 pThis->p Config->pfnGetMac(pThis->pConfig, &Mac);819 pThis->pIAboveConfig->pfnGetMac(pThis->pIAboveConfig, &Mac); 833 820 /* Re-activate the port forwarding. If */ 834 821 slirp_set_ethaddr_and_activate_port_forwarding(pThis->pNATState, Mac.au8, pThis->GuestIP); … … 998 985 pDrvIns->IBase.pfnQueryInterface = drvNATQueryInterface; 999 986 /* INetwork */ 1000 pThis->INetworkConnector.pfnSend = drvNATSend; 1001 pThis->INetworkConnector.pfnSetPromiscuousMode = drvNATSetPromiscuousMode; 1002 pThis->INetworkConnector.pfnNotifyLinkChanged = drvNATNotifyLinkChanged; 987 /** @todo implement the new INetworkUp interfaces. */ 988 pThis->INetworkUp.pfnSendDeprecated = drvNATSendDeprecated; 989 pThis->INetworkUp.pfnSetPromiscuousMode = drvNATSetPromiscuousMode; 990 pThis->INetworkUp.pfnNotifyLinkChanged = drvNATNotifyLinkChanged; 1003 991 1004 992 /* … … 1025 1013 * Query the network port interface. 1026 1014 */ 1027 pThis->p Port = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKPORT);1028 if (!pThis->p Port)1015 pThis->pIAboveNet = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKDOWN); 1016 if (!pThis->pIAboveNet) 1029 1017 return PDMDRV_SET_ERROR(pDrvIns, VERR_PDM_MISSING_INTERFACE_ABOVE, 1030 1018 N_("Configuration error: the above device/driver didn't " 1031 1019 "export the network port interface")); 1032 pThis->p Config = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKCONFIG);1033 if (!pThis->p Config)1020 pThis->pIAboveConfig = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKCONFIG); 1021 if (!pThis->pIAboveConfig) 1034 1022 return PDMDRV_SET_ERROR(pDrvIns, VERR_PDM_MISSING_INTERFACE_ABOVE, 1035 1023 N_("Configuration error: the above device/driver didn't " -
trunk/src/VBox/Devices/Network/DrvNetSniffer.cpp
r26300 r26305 48 48 * Block driver instance data. 49 49 * 50 * @implements PDMINETWORK CONNECTOR51 * @implements PDMINETWORK PORT50 * @implements PDMINETWORKUP 51 * @implements PDMINETWORKDOWN 52 52 * @implements PDMINETWORKCONFIG 53 53 */ … … 55 55 { 56 56 /** The network interface. */ 57 PDMINETWORK CONNECTOR INetworkConnector;57 PDMINETWORKUP INetworkUp; 58 58 /** The network interface. */ 59 PDMINETWORKPORT INetworkPort; 60 /** The network config interface. */ 59 PDMINETWORKDOWN INetworkDown; 60 /** The network config interface. 61 * @todo this is a main interface and shouldn't be here... */ 61 62 PDMINETWORKCONFIG INetworkConfig; 62 63 /** The port we're attached to. */ 63 PPDMINETWORK PORT pPort;64 PPDMINETWORKDOWN pIAboveNet; 64 65 /** The config port interface we're attached to. */ 65 PPDMINETWORKCONFIG p Config;66 PPDMINETWORKCONFIG pIAboveConfig; 66 67 /** The connector that's attached to us. */ 67 PPDMINETWORK CONNECTOR pConnector;68 PPDMINETWORKUP pIBelowNet; 68 69 /** The filename. */ 69 70 char szFilename[RTPATH_MAX]; … … 79 80 } DRVNETSNIFFER, *PDRVNETSNIFFER; 80 81 81 /** Converts a pointer to NAT::INetworkConnector to a PDRVNETSNIFFER. */ 82 #define PDMINETWORKCONNECTOR_2_DRVNETSNIFFER(pInterface) ( (PDRVNETSNIFFER)((uintptr_t)pInterface - RT_OFFSETOF(DRVNETSNIFFER, INetworkConnector)) ) 83 84 /** Converts a pointer to NAT::INetworkPort to a PDRVNETSNIFFER. */ 85 #define PDMINETWORKPORT_2_DRVNETSNIFFER(pInterface) ( (PDRVNETSNIFFER)((uintptr_t)pInterface - RT_OFFSETOF(DRVNETSNIFFER, INetworkPort)) ) 86 87 /** Converts a pointer to NAT::INetworkConfig to a PDRVNETSNIFFER. */ 88 #define PDMINETWORKCONFIG_2_DRVNETSNIFFER(pInterface) ( (PDRVNETSNIFFER)((uintptr_t)pInterface - RT_OFFSETOF(DRVNETSNIFFER, INetworkConfig)) ) 89 90 91 92 /** 93 * Send data to the network. 94 * 95 * @returns VBox status code. 96 * @param pInterface Pointer to the interface structure containing the called function pointer. 97 * @param pvBuf Data to send. 98 * @param cb Number of bytes to send. 99 * @thread EMT 100 */ 101 static DECLCALLBACK(int) drvNetSnifferSend(PPDMINETWORKCONNECTOR pInterface, const void *pvBuf, size_t cb) 102 { 103 PDRVNETSNIFFER pThis = PDMINETWORKCONNECTOR_2_DRVNETSNIFFER(pInterface); 82 83 84 /** 85 * @interface_method_impl{PDMINETWORKUP,pfnSendDeprecated} 86 */ 87 static DECLCALLBACK(int) drvNetSnifferSendDeprecated(PPDMINETWORKUP pInterface, const void *pvBuf, size_t cb) 88 { 89 PDRVNETSNIFFER pThis = RT_FROM_MEMBER(pInterface, DRVNETSNIFFER, INetworkUp); 104 90 105 91 /* output to sniffer */ … … 109 95 110 96 /* pass down */ 111 if (pThis->p Connector)112 { 113 int rc = pThis->p Connector->pfnSend(pThis->pConnector, pvBuf, cb);97 if (pThis->pIBelowNet) 98 { 99 int rc = pThis->pIBelowNet->pfnSendDeprecated(pThis->pIBelowNet, pvBuf, cb); 114 100 #if 0 115 101 RTCritSectEnter(&pThis->Lock); … … 128 114 129 115 /** 130 * Set promiscuous mode. 131 * 132 * This is called when the promiscuous mode is set. This means that there doesn't have 133 * to be a mode change when it's called. 134 * 135 * @param pInterface Pointer to the interface structure containing the called function pointer. 136 * @param fPromiscuous Set if the adaptor is now in promiscuous mode. Clear if it is not. 137 * @thread EMT 138 */ 139 static DECLCALLBACK(void) drvNetSnifferSetPromiscuousMode(PPDMINETWORKCONNECTOR pInterface, bool fPromiscuous) 116 * @interface_method_impl{PDMINETWORKUP,pfnSetPromiscuousMode} 117 */ 118 static DECLCALLBACK(void) drvNetSnifferSetPromiscuousMode(PPDMINETWORKUP pInterface, bool fPromiscuous) 140 119 { 141 120 LogFlow(("drvNetSnifferSetPromiscuousMode: fPromiscuous=%d\n", fPromiscuous)); 142 PDRVNETSNIFFER pThis = PDMINETWORKCONNECTOR_2_DRVNETSNIFFER(pInterface); 143 if (pThis->pConnector) 144 pThis->pConnector->pfnSetPromiscuousMode(pThis->pConnector, fPromiscuous); 145 } 146 147 148 /** 149 * Notification on link status changes. 150 * 151 * @param pInterface Pointer to the interface structure containing the called function pointer. 152 * @param enmLinkState The new link state. 153 * @thread EMT 154 */ 155 static DECLCALLBACK(void) drvNetSnifferNotifyLinkChanged(PPDMINETWORKCONNECTOR pInterface, PDMNETWORKLINKSTATE enmLinkState) 121 PDRVNETSNIFFER pThis = RT_FROM_MEMBER(pInterface, DRVNETSNIFFER, INetworkUp); 122 if (pThis->pIBelowNet) 123 pThis->pIBelowNet->pfnSetPromiscuousMode(pThis->pIBelowNet, fPromiscuous); 124 } 125 126 127 /** 128 * @interface_method_impl{PDMINETWORKUP,pfnNotifyLinkChanged} 129 */ 130 static DECLCALLBACK(void) drvNetSnifferNotifyLinkChanged(PPDMINETWORKUP pInterface, PDMNETWORKLINKSTATE enmLinkState) 156 131 { 157 132 LogFlow(("drvNetSnifferNotifyLinkChanged: enmLinkState=%d\n", enmLinkState)); 158 PDRVNETSNIFFER pThis = PDMINETWORKCONNECTOR_2_DRVNETSNIFFER(pInterface);159 if (pThis->p Connector)160 pThis->p Connector->pfnNotifyLinkChanged(pThis->pConnector, enmLinkState);133 PDRVNETSNIFFER pThis = RT_FROM_MEMBER(pInterface, DRVNETSNIFFER, INetworkUp); 134 if (pThis->pIBelowNet) 135 pThis->pIBelowNet->pfnNotifyLinkChanged(pThis->pIBelowNet, enmLinkState); 161 136 } 162 137 … … 170 145 * @thread EMT 171 146 */ 172 static DECLCALLBACK(int) drvNetSnifferWaitReceiveAvail(PPDMINETWORK PORTpInterface, RTMSINTERVAL cMillies)173 { 174 PDRVNETSNIFFER pThis = PDMINETWORKPORT_2_DRVNETSNIFFER(pInterface);175 return pThis->p Port->pfnWaitReceiveAvail(pThis->pPort, cMillies);147 static DECLCALLBACK(int) drvNetSnifferWaitReceiveAvail(PPDMINETWORKDOWN pInterface, RTMSINTERVAL cMillies) 148 { 149 PDRVNETSNIFFER pThis = RT_FROM_MEMBER(pInterface, DRVNETSNIFFER, INetworkDown); 150 return pThis->pIAboveNet->pfnWaitReceiveAvail(pThis->pIAboveNet, cMillies); 176 151 } 177 152 … … 186 161 * @thread EMT 187 162 */ 188 static DECLCALLBACK(int) drvNetSnifferReceive(PPDMINETWORK PORTpInterface, const void *pvBuf, size_t cb)189 { 190 PDRVNETSNIFFER pThis = PDMINETWORKPORT_2_DRVNETSNIFFER(pInterface);163 static DECLCALLBACK(int) drvNetSnifferReceive(PPDMINETWORKDOWN pInterface, const void *pvBuf, size_t cb) 164 { 165 PDRVNETSNIFFER pThis = RT_FROM_MEMBER(pInterface, DRVNETSNIFFER, INetworkDown); 191 166 192 167 /* output to sniffer */ … … 196 171 197 172 /* pass up */ 198 int rc = pThis->p Port->pfnReceive(pThis->pPort, pvBuf, cb);173 int rc = pThis->pIAboveNet->pfnReceive(pThis->pIAboveNet, pvBuf, cb); 199 174 #if 0 200 175 RTCritSectEnter(&pThis->Lock); … … 220 195 static DECLCALLBACK(int) drvNetSnifferGetMac(PPDMINETWORKCONFIG pInterface, PRTMAC pMac) 221 196 { 222 PDRVNETSNIFFER pThis = PDMINETWORKCONFIG_2_DRVNETSNIFFER(pInterface);223 return pThis->p Config->pfnGetMac(pThis->pConfig, pMac);197 PDRVNETSNIFFER pThis = RT_FROM_MEMBER(pInterface, DRVNETSNIFFER, INetworkConfig); 198 return pThis->pIAboveConfig->pfnGetMac(pThis->pIAboveConfig, pMac); 224 199 } 225 200 … … 233 208 static DECLCALLBACK(PDMNETWORKLINKSTATE) drvNetSnifferGetLinkState(PPDMINETWORKCONFIG pInterface) 234 209 { 235 PDRVNETSNIFFER pThis = PDMINETWORKCONFIG_2_DRVNETSNIFFER(pInterface);236 return pThis->p Config->pfnGetLinkState(pThis->pConfig);210 PDRVNETSNIFFER pThis = RT_FROM_MEMBER(pInterface, DRVNETSNIFFER, INetworkConfig); 211 return pThis->pIAboveConfig->pfnGetLinkState(pThis->pIAboveConfig); 237 212 } 238 213 … … 247 222 static DECLCALLBACK(int) drvNetSnifferSetLinkState(PPDMINETWORKCONFIG pInterface, PDMNETWORKLINKSTATE enmState) 248 223 { 249 PDRVNETSNIFFER pThis = PDMINETWORKCONFIG_2_DRVNETSNIFFER(pInterface);250 return pThis->p Config->pfnSetLinkState(pThis->pConfig, enmState);224 PDRVNETSNIFFER pThis = RT_FROM_MEMBER(pInterface, DRVNETSNIFFER, INetworkConfig); 225 return pThis->pIAboveConfig->pfnSetLinkState(pThis->pIAboveConfig, enmState); 251 226 } 252 227 … … 260 235 PDRVNETSNIFFER pThis = PDMINS_2_DATA(pDrvIns, PDRVNETSNIFFER); 261 236 PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASE, &pDrvIns->IBase); 262 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK CONNECTOR, &pThis->INetworkConnector);263 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK PORT, &pThis->INetworkPort);237 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKUP, &pThis->INetworkUp); 238 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKDOWN, &pThis->INetworkDown); 264 239 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKCONFIG, &pThis->INetworkConfig); 265 240 return NULL; … … 279 254 LogFlow(("drvNetSnifferDetach: pDrvIns: %p, fFlags: %u\n", pDrvIns, fFlags)); 280 255 281 pThis->p Connector= NULL;256 pThis->pIBelowNet = NULL; 282 257 } 283 258 … … 302 277 int rc = PDMDrvHlpAttach(pDrvIns, fFlags, &pBaseDown); 303 278 if (rc == VERR_PDM_NO_ATTACHED_DRIVER) 304 pThis->p Connector= NULL;279 pThis->pIBelowNet = NULL; 305 280 else if (RT_SUCCESS(rc)) 306 281 { 307 pThis->p Connector = PDMIBASE_QUERY_INTERFACE(pBaseDown, PDMINETWORKCONNECTOR);308 if (!pThis->p Connector)282 pThis->pIBelowNet = PDMIBASE_QUERY_INTERFACE(pBaseDown, PDMINETWORKUP); 283 if (!pThis->pIBelowNet) 309 284 { 310 285 AssertMsgFailed(("Configuration error: the driver below didn't export the network connector interface!\n")); … … 369 344 * Init the static parts. 370 345 */ 371 pThis->pDrvIns = pDrvIns;372 pThis->File = NIL_RTFILE;346 pThis->pDrvIns = pDrvIns; 347 pThis->File = NIL_RTFILE; 373 348 /* The pcap file *must* start at time offset 0,0. */ 374 pThis->StartNanoTS = RTTimeNanoTS() - RTTimeProgramNanoTS();349 pThis->StartNanoTS = RTTimeNanoTS() - RTTimeProgramNanoTS(); 375 350 /* IBase */ 376 pDrvIns->IBase.pfnQueryInterface = drvNetSnifferQueryInterface; 377 /* INetworkConnector */ 378 pThis->INetworkConnector.pfnSend = drvNetSnifferSend; 379 pThis->INetworkConnector.pfnSetPromiscuousMode = drvNetSnifferSetPromiscuousMode; 380 pThis->INetworkConnector.pfnNotifyLinkChanged = drvNetSnifferNotifyLinkChanged; 381 /* INetworkPort */ 382 pThis->INetworkPort.pfnWaitReceiveAvail = drvNetSnifferWaitReceiveAvail; 383 pThis->INetworkPort.pfnReceive = drvNetSnifferReceive; 351 pDrvIns->IBase.pfnQueryInterface = drvNetSnifferQueryInterface; 352 /* INetworkUp */ 353 pThis->INetworkUp.pfnSendDeprecated = drvNetSnifferSendDeprecated; 354 pThis->INetworkUp.pfnSetPromiscuousMode = drvNetSnifferSetPromiscuousMode; 355 pThis->INetworkUp.pfnNotifyLinkChanged = drvNetSnifferNotifyLinkChanged; 356 /** @todo implement the new interfaces methods! */ 357 /* INetworkDown */ 358 pThis->INetworkDown.pfnWaitReceiveAvail = drvNetSnifferWaitReceiveAvail; 359 pThis->INetworkDown.pfnReceive = drvNetSnifferReceive; 384 360 /* INetworkConfig */ 385 361 pThis->INetworkConfig.pfnGetMac = drvNetSnifferGetMac; … … 408 384 * Query the network port interface. 409 385 */ 410 pThis->p Port = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKPORT);411 if (!pThis->p Port)386 pThis->pIAboveNet = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKDOWN); 387 if (!pThis->pIAboveNet) 412 388 { 413 389 AssertMsgFailed(("Configuration error: the above device/driver didn't export the network port interface!\n")); … … 418 394 * Query the network config interface. 419 395 */ 420 pThis->p Config = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKCONFIG);421 if (!pThis->p Config)396 pThis->pIAboveConfig = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKCONFIG); 397 if (!pThis->pIAboveConfig) 422 398 { 423 399 AssertMsgFailed(("Configuration error: the above device/driver didn't export the network config interface!\n")); … … 431 407 rc = PDMDrvHlpAttach(pDrvIns, fFlags, &pBaseDown); 432 408 if (rc == VERR_PDM_NO_ATTACHED_DRIVER) 433 pThis->p Connector= NULL;409 pThis->pIBelowNet = NULL; 434 410 else if (RT_SUCCESS(rc)) 435 411 { 436 pThis->p Connector = PDMIBASE_QUERY_INTERFACE(pBaseDown, PDMINETWORKCONNECTOR);437 if (!pThis->p Connector)412 pThis->pIBelowNet = PDMIBASE_QUERY_INTERFACE(pBaseDown, PDMINETWORKUP); 413 if (!pThis->pIBelowNet) 438 414 { 439 415 AssertMsgFailed(("Configuration error: the driver below didn't export the network connector interface!\n")); -
trunk/src/VBox/Devices/Network/DrvTAP.cpp
r26300 r26305 84 84 * TAP driver instance data. 85 85 * 86 * @implements PDMINETWORK CONNECTOR86 * @implements PDMINETWORKUP 87 87 */ 88 88 typedef struct DRVTAP 89 89 { 90 90 /** The network interface. */ 91 PDMINETWORK CONNECTOR INetworkConnector;91 PDMINETWORKUP INetworkUp; 92 92 /** The network interface. */ 93 PPDMINETWORK PORT pPort;93 PPDMINETWORKDOWN pIAboveNet; 94 94 /** Pointer to the driver instance. */ 95 95 PPDMDRVINS pDrvIns; … … 146 146 147 147 148 /** Converts a pointer to TAP::INetwork Connectorto a PRDVTAP. */149 #define PDMINETWORK CONNECTOR_2_DRVTAP(pInterface) ( (PDRVTAP)((uintptr_t)pInterface - RT_OFFSETOF(DRVTAP, INetworkConnector)) )148 /** Converts a pointer to TAP::INetworkUp to a PRDVTAP. */ 149 #define PDMINETWORKUP_2_DRVTAP(pInterface) ( (PDRVTAP)((uintptr_t)pInterface - RT_OFFSETOF(DRVTAP, INetworkUp)) ) 150 150 151 151 … … 164 164 165 165 /** 166 * Send data to the network. 167 * 168 * @returns VBox status code. 169 * @param pInterface Pointer to the interface structure containing the called function pointer. 170 * @param pvBuf Data to send. 171 * @param cb Number of bytes to send. 172 * @thread EMT 173 */ 174 static DECLCALLBACK(int) drvTAPSend(PPDMINETWORKCONNECTOR pInterface, const void *pvBuf, size_t cb) 175 { 176 PDRVTAP pThis = PDMINETWORKCONNECTOR_2_DRVTAP(pInterface); 166 * @interface_method_impl{PDMINETWORKUP,pfnSendDeprecated} 167 */ 168 static DECLCALLBACK(int) drvTAPSendDeprecated(PPDMINETWORKUP pInterface, const void *pvBuf, size_t cb) 169 { 170 PDRVTAP pThis = PDMINETWORKUP_2_DRVTAP(pInterface); 177 171 STAM_COUNTER_INC(&pThis->StatPktSent); 178 172 STAM_COUNTER_ADD(&pThis->StatPktSentBytes, cb); … … 198 192 199 193 /** 200 * Set promiscuous mode. 201 * 202 * This is called when the promiscuous mode is set. This means that there doesn't have 203 * to be a mode change when it's called. 204 * 205 * @param pInterface Pointer to the interface structure containing the called function pointer. 206 * @param fPromiscuous Set if the adaptor is now in promiscuous mode. Clear if it is not. 207 * @thread EMT 208 */ 209 static DECLCALLBACK(void) drvTAPSetPromiscuousMode(PPDMINETWORKCONNECTOR pInterface, bool fPromiscuous) 194 * @interface_method_impl{PDMINETWORKUP,pfnSetPromiscuousMode} 195 */ 196 static DECLCALLBACK(void) drvTAPSetPromiscuousMode(PPDMINETWORKUP pInterface, bool fPromiscuous) 210 197 { 211 198 LogFlow(("drvTAPSetPromiscuousMode: fPromiscuous=%d\n", fPromiscuous)); … … 221 208 * @thread EMT 222 209 */ 223 static DECLCALLBACK(void) drvTAPNotifyLinkChanged(PPDMINETWORK CONNECTORpInterface, PDMNETWORKLINKSTATE enmLinkState)210 static DECLCALLBACK(void) drvTAPNotifyLinkChanged(PPDMINETWORKUP pInterface, PDMNETWORKLINKSTATE enmLinkState) 224 211 { 225 212 LogFlow(("drvNATNotifyLinkChanged: enmLinkState=%d\n", enmLinkState)); … … 304 291 */ 305 292 STAM_PROFILE_ADV_STOP(&pThis->StatReceive, a); 306 int rc1 = pThis->p Port->pfnWaitReceiveAvail(pThis->pPort, RT_INDEFINITE_WAIT);293 int rc1 = pThis->pIAboveNet->pfnWaitReceiveAvail(pThis->pIAboveNet, RT_INDEFINITE_WAIT); 307 294 STAM_PROFILE_ADV_START(&pThis->StatReceive, a); 308 295 … … 326 313 STAM_COUNTER_INC(&pThis->StatPktRecv); 327 314 STAM_COUNTER_ADD(&pThis->StatPktRecvBytes, cbRead); 328 rc1 = pThis->p Port->pfnReceive(pThis->pPort, achBuf, cbRead);315 rc1 = pThis->pIAboveNet->pfnReceive(pThis->pIAboveNet, achBuf, cbRead); 329 316 AssertRC(rc1); 330 317 } … … 787 774 788 775 PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASE, &pDrvIns->IBase); 789 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORK CONNECTOR, &pThis->INetworkConnector);776 PDMIBASE_RETURN_INTERFACE(pszIID, PDMINETWORKUP, &pThis->INetworkUp); 790 777 return NULL; 791 778 } … … 905 892 pDrvIns->IBase.pfnQueryInterface = drvTAPQueryInterface; 906 893 /* INetwork */ 907 pThis->INetworkConnector.pfnSend = drvTAPSend; 908 pThis->INetworkConnector.pfnSetPromiscuousMode = drvTAPSetPromiscuousMode; 909 pThis->INetworkConnector.pfnNotifyLinkChanged = drvTAPNotifyLinkChanged; 894 /** @todo implement the new INetworkUp interfaces. */ 895 pThis->INetworkUp.pfnSendDeprecated = drvTAPSendDeprecated; 896 pThis->INetworkUp.pfnSetPromiscuousMode = drvTAPSetPromiscuousMode; 897 pThis->INetworkUp.pfnNotifyLinkChanged = drvTAPNotifyLinkChanged; 910 898 911 899 /* … … 925 913 * Query the network port interface. 926 914 */ 927 pThis->p Port = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKPORT);928 if (!pThis->p Port)915 pThis->pIAboveNet = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMINETWORKDOWN); 916 if (!pThis->pIAboveNet) 929 917 return PDMDRV_SET_ERROR(pDrvIns, VERR_PDM_MISSING_INTERFACE_ABOVE, 930 918 N_("Configuration error: The above device/driver didn't export the network port interface")); -
trunk/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
r26222 r26305 402 402 GEN_CHECK_OFF(PCNetState, pDrvBase); 403 403 GEN_CHECK_OFF(PCNetState, IBase); 404 GEN_CHECK_OFF(PCNetState, INetwork Port);404 GEN_CHECK_OFF(PCNetState, INetworkDown); 405 405 GEN_CHECK_OFF(PCNetState, INetworkConfig); 406 406 GEN_CHECK_OFF(PCNetState, MMIOBase); … … 1265 1265 GEN_CHECK_SIZE(E1KSTATE); 1266 1266 GEN_CHECK_OFF(E1KSTATE, IBase); 1267 GEN_CHECK_OFF(E1KSTATE, INetwork Port);1267 GEN_CHECK_OFF(E1KSTATE, INetworkDown); 1268 1268 GEN_CHECK_OFF(E1KSTATE, INetworkConfig); 1269 1269 GEN_CHECK_OFF(E1KSTATE, ILeds); … … 1357 1357 GEN_CHECK_OFF(VPCISTATE, Queues[VIRTIO_MAX_NQUEUES]); 1358 1358 GEN_CHECK_OFF(VNETSTATE, VPCI); 1359 GEN_CHECK_OFF(VNETSTATE, INetwork Port);1359 GEN_CHECK_OFF(VNETSTATE, INetworkDown); 1360 1360 GEN_CHECK_OFF(VNETSTATE, INetworkConfig); 1361 1361 GEN_CHECK_OFF(VNETSTATE, pDrvBase);
Note:
See TracChangeset
for help on using the changeset viewer.