From 002037ce155a1815f98c6b04a62bf48dd0799714 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 1 Jun 2021 17:21:18 +0200 Subject: [PATCH] vbox6: support MAC address overwrite --- repos/ports/ports/virtualbox6.hash | 2 +- .../src/virtualbox6/patches/network.patch | 80 +++++++++++++++++++ repos/ports/src/virtualbox6/patches/series | 1 + 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 repos/ports/src/virtualbox6/patches/network.patch diff --git a/repos/ports/ports/virtualbox6.hash b/repos/ports/ports/virtualbox6.hash index d21863098f..a5705bfd12 100644 --- a/repos/ports/ports/virtualbox6.hash +++ b/repos/ports/ports/virtualbox6.hash @@ -1 +1 @@ -3a07749ccbdefed104b9a499c1917c55022bf0d0 +3d6230564eddb5ab205780c7b31acdc169702e0f diff --git a/repos/ports/src/virtualbox6/patches/network.patch b/repos/ports/src/virtualbox6/patches/network.patch new file mode 100644 index 0000000000..a5890855f9 --- /dev/null +++ b/repos/ports/src/virtualbox6/patches/network.patch @@ -0,0 +1,80 @@ +network.patch + +--- a/src/virtualbox6/src/VBox/Devices/Network/DevE1000.cpp ++++ b/src/virtualbox6/src/VBox/Devices/Network/DevE1000.cpp +@@ -7992,6 +7992,33 @@ static DECLCALLBACK(int) e1kR3Construct(PPDMDEVINS pDevIns, int iInstance, PCFGM + pDevIns->fR0Enabled ? "enabled" : "disabled", + pDevIns->fRCEnabled ? "enabled" : "disabled")); + ++ /* For Genode attach already here to be able to overwrite mac address */ ++ /* Network driver */ ++ rc = PDMDevHlpDriverAttach(pDevIns, 0, &pThisCC->IBase, &pThisCC->pDrvBase, "Network Port"); ++ if (RT_SUCCESS(rc)) ++ { ++ /* Genode: read out the mac address from nic_session interface */ ++ PPDMINETWORKCONFIG pDrvConfig = PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMINETWORKCONFIG); ++ Assert(pDrvConfig && pDrvConfig->pfnGetMac); ++ pDrvConfig->pfnGetMac(pDrvConfig, &pThis->macConfigured); ++ ++ pThisCC->pDrvR3 = PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMINETWORKUP); ++ AssertMsgReturn(pThisCC->pDrvR3, ("Failed to obtain the PDMINETWORKUP interface!\n"), VERR_PDM_MISSING_INTERFACE_BELOW); ++ ++#if 0 /** @todo @bugref{9218} ring-0 driver stuff */ ++ pThisR0->pDrvR0 = PDMIBASER0_QUERY_INTERFACE(PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMIBASER0), PDMINETWORKUP); ++ pThisRC->pDrvRC = PDMIBASERC_QUERY_INTERFACE(PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMIBASERC), PDMINETWORKUP); ++#endif ++ } ++ else if ( rc == VERR_PDM_NO_ATTACHED_DRIVER ++ || rc == VERR_PDM_CFG_MISSING_DRIVER_NAME) ++ { ++ /* No error! */ ++ E1kLog(("%s This adapter is not attached to any network!\n", pThis->szPrf)); ++ } ++ else ++ return PDMDEV_SET_ERROR(pDevIns, rc, N_("Failed to attach the network LUN")); ++ + /* + * Initialize sub-components and register everything with the VMM. + */ +@@ -8131,27 +8158,6 @@ static DECLCALLBACK(int) e1kR3Construct(PPDMDEVINS pDevIns, int iInstance, PCFGM + return PDMDEV_SET_ERROR(pDevIns, rc, N_("Failed to attach the status LUN")); + pThisCC->pLedsConnector = PDMIBASE_QUERY_INTERFACE(pBase, PDMILEDCONNECTORS); + +- /* Network driver */ +- rc = PDMDevHlpDriverAttach(pDevIns, 0, &pThisCC->IBase, &pThisCC->pDrvBase, "Network Port"); +- if (RT_SUCCESS(rc)) +- { +- pThisCC->pDrvR3 = PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMINETWORKUP); +- AssertMsgReturn(pThisCC->pDrvR3, ("Failed to obtain the PDMINETWORKUP interface!\n"), VERR_PDM_MISSING_INTERFACE_BELOW); +- +-#if 0 /** @todo @bugref{9218} ring-0 driver stuff */ +- pThisR0->pDrvR0 = PDMIBASER0_QUERY_INTERFACE(PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMIBASER0), PDMINETWORKUP); +- pThisRC->pDrvRC = PDMIBASERC_QUERY_INTERFACE(PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMIBASERC), PDMINETWORKUP); +-#endif +- } +- else if ( rc == VERR_PDM_NO_ATTACHED_DRIVER +- || rc == VERR_PDM_CFG_MISSING_DRIVER_NAME) +- { +- /* No error! */ +- E1kLog(("%s This adapter is not attached to any network!\n", pThis->szPrf)); +- } +- else +- return PDMDEV_SET_ERROR(pDevIns, rc, N_("Failed to attach the network LUN")); +- + rc = PDMDevHlpSUPSemEventCreate(pDevIns, &pThis->hEventMoreRxDescAvail); + AssertRCReturn(rc, rc); + +--- a/src/virtualbox6/src/VBox/Devices/Network/DevPCNet.cpp ++++ b/src/virtualbox6/src/VBox/Devices/Network/DevPCNet.cpp +@@ -5340,6 +5340,11 @@ static DECLCALLBACK(int) pcnetR3Construct(PPDMDEVINS pDevIns, int iInstance, PCF + rc = PDMDevHlpDriverAttach(pDevIns, 0, &pThisCC->IBase, &pThisCC->pDrvBase, "Network Port"); + if (RT_SUCCESS(rc)) + { ++ /* Genode: read out the mac address from nic_session interface */ ++ PPDMINETWORKCONFIG pDrvConfig = PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMINETWORKCONFIG); ++ Assert(pDrvConfig && pDrvConfig->pfnGetMac); ++ pDrvConfig->pfnGetMac(pDrvConfig, &pThis->MacConfigured); ++ + pThisCC->pDrv = PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMINETWORKUP); + AssertMsgReturn(pThisCC->pDrv, ("Failed to obtain the PDMINETWORKUP interface!\n"), + VERR_PDM_MISSING_INTERFACE_BELOW); diff --git a/repos/ports/src/virtualbox6/patches/series b/repos/ports/src/virtualbox6/patches/series index cd55180360..2fec67e0db 100644 --- a/repos/ports/src/virtualbox6/patches/series +++ b/repos/ports/src/virtualbox6/patches/series @@ -2,3 +2,4 @@ serial.patch drvtap.patch qemu-xhci.patch narrowing.patch +network.patch