VirtualBox

Changeset 101469 in vbox for trunk/src/VBox/Main/src-client


Ignore:
Timestamp:
Oct 17, 2023 10:22:01 AM (15 months ago)
Author:
vboxsync
Message:

Main/ConsoleImpl: Move the network controller configuration out of the x86 config constructor into a separate method in order to be able to use it from the Armv8 variant later on, bugref:10528

Location:
trunk/src/VBox/Main/src-client
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/ConsoleImplConfigCommon.cpp

    r101465 r101469  
    46304630
    46314631
     4632int Console::i_configNetworkCtrls(ComPtr<IMachine> pMachine, ComPtr<IPlatformProperties> pPlatformProperties,
     4633                                  ChipsetType_T enmChipset, BusAssignmentManager *pBusMgr, PCVMMR3VTABLE pVMM, PUVM pUVM,
     4634                                  PCFGMNODE pDevices, std::list<BootNic> &llBootNics)
     4635{
     4636/* Comment out the following line to remove VMWare compatibility hack. */
     4637#define VMWARE_NET_IN_SLOT_11
     4638
     4639    PCFGMNODE pDev = NULL;          /* /Devices/Dev/ */
     4640    PCFGMNODE pInst = NULL;         /* /Devices/Dev/0/ */
     4641    PCFGMNODE pCfg = NULL;          /* /Devices/Dev/.../Config/ */
     4642    PCFGMNODE pLunL0 = NULL;        /* /Devices/Dev/0/LUN#0/ */
     4643
     4644    ULONG maxNetworkAdapters;
     4645    HRESULT hrc = pPlatformProperties->GetMaxNetworkAdapters(enmChipset, &maxNetworkAdapters); H();
     4646
     4647#ifdef VMWARE_NET_IN_SLOT_11
     4648    bool fSwapSlots3and11 = false;
     4649#endif
     4650    PCFGMNODE pDevPCNet = NULL;          /* PCNet-type devices */
     4651    InsertConfigNode(pDevices, "pcnet", &pDevPCNet);
     4652#ifdef VBOX_WITH_E1000
     4653    PCFGMNODE pDevE1000 = NULL;          /* E1000-type devices */
     4654    InsertConfigNode(pDevices, "e1000", &pDevE1000);
     4655#endif
     4656#ifdef VBOX_WITH_VIRTIO
     4657    PCFGMNODE pDevVirtioNet = NULL;          /* Virtio network devices */
     4658    InsertConfigNode(pDevices, "virtio-net", &pDevVirtioNet);
     4659#endif /* VBOX_WITH_VIRTIO */
     4660    PCFGMNODE pDevDP8390 = NULL;         /* DP8390-type devices */
     4661    InsertConfigNode(pDevices, "dp8390", &pDevDP8390);
     4662    PCFGMNODE pDev3C501 = NULL;          /* EtherLink-type devices */
     4663    InsertConfigNode(pDevices, "3c501",  &pDev3C501);
     4664
     4665    for (ULONG uInstance = 0; uInstance < maxNetworkAdapters; ++uInstance)
     4666    {
     4667        ComPtr<INetworkAdapter> networkAdapter;
     4668         hrc = pMachine->GetNetworkAdapter(uInstance, networkAdapter.asOutParam());     H();
     4669        BOOL fEnabledNetAdapter = FALSE;
     4670        hrc = networkAdapter->COMGETTER(Enabled)(&fEnabledNetAdapter);                  H();
     4671        if (!fEnabledNetAdapter)
     4672            continue;
     4673
     4674        /*
     4675         * The virtual hardware type. Create appropriate device first.
     4676         */
     4677        const char *pszAdapterName = "pcnet";
     4678        NetworkAdapterType_T adapterType;
     4679        hrc = networkAdapter->COMGETTER(AdapterType)(&adapterType);                     H();
     4680        switch (adapterType)
     4681        {
     4682            case NetworkAdapterType_Am79C970A:
     4683            case NetworkAdapterType_Am79C973:
     4684            case NetworkAdapterType_Am79C960:
     4685                pDev = pDevPCNet;
     4686                break;
     4687#ifdef VBOX_WITH_E1000
     4688            case NetworkAdapterType_I82540EM:
     4689            case NetworkAdapterType_I82543GC:
     4690            case NetworkAdapterType_I82545EM:
     4691                pDev = pDevE1000;
     4692                pszAdapterName = "e1000";
     4693                break;
     4694#endif
     4695#ifdef VBOX_WITH_VIRTIO
     4696            case NetworkAdapterType_Virtio:
     4697                pDev = pDevVirtioNet;
     4698                pszAdapterName = "virtio-net";
     4699                break;
     4700#endif /* VBOX_WITH_VIRTIO */
     4701            case NetworkAdapterType_NE1000:
     4702            case NetworkAdapterType_NE2000:
     4703            case NetworkAdapterType_WD8003:
     4704            case NetworkAdapterType_WD8013:
     4705            case NetworkAdapterType_ELNK2:
     4706                pDev = pDevDP8390;
     4707                break;
     4708            case NetworkAdapterType_ELNK1:
     4709                pDev = pDev3C501;
     4710                break;
     4711            default:
     4712                AssertMsgFailed(("Invalid network adapter type '%d' for slot '%d'", adapterType, uInstance));
     4713                return pVMM->pfnVMR3SetError(pUVM, VERR_INVALID_PARAMETER, RT_SRC_POS,
     4714                                             N_("Invalid network adapter type '%d' for slot '%d'"), adapterType, uInstance);
     4715        }
     4716
     4717        InsertConfigNode(pDev, Utf8StrFmt("%u", uInstance).c_str(), &pInst);
     4718        InsertConfigInteger(pInst, "Trusted",              1); /* boolean */
     4719        /* the first network card gets the PCI ID 3, the next 3 gets 8..10,
     4720         * next 4 get 16..19. */
     4721        int iPCIDeviceNo;
     4722        switch (uInstance)
     4723        {
     4724            case 0:
     4725                iPCIDeviceNo = 3;
     4726                break;
     4727            case 1: case 2: case 3:
     4728                iPCIDeviceNo = uInstance - 1 + 8;
     4729                break;
     4730            case 4: case 5: case 6: case 7:
     4731                iPCIDeviceNo = uInstance - 4 + 16;
     4732                break;
     4733            default:
     4734                /* auto assignment */
     4735                iPCIDeviceNo = -1;
     4736                break;
     4737        }
     4738#ifdef VMWARE_NET_IN_SLOT_11
     4739        /*
     4740         * Dirty hack for PCI slot compatibility with VMWare,
     4741         * it assigns slot 0x11 to the first network controller.
     4742         */
     4743        if (iPCIDeviceNo == 3 && adapterType == NetworkAdapterType_I82545EM)
     4744        {
     4745            iPCIDeviceNo = 0x11;
     4746            fSwapSlots3and11 = true;
     4747        }
     4748        else if (iPCIDeviceNo == 0x11 && fSwapSlots3and11)
     4749            iPCIDeviceNo = 3;
     4750#endif
     4751        PCIBusAddress PCIAddr = PCIBusAddress(0, iPCIDeviceNo, 0);
     4752        hrc = pBusMgr->assignPCIDevice(pszAdapterName, pInst, PCIAddr);                 H();
     4753
     4754        InsertConfigNode(pInst, "Config", &pCfg);
     4755#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE   /* not safe here yet. */ /** @todo Make PCNet ring-0 safe on 32-bit mac kernels! */
     4756        if (pDev == pDevPCNet)
     4757            InsertConfigInteger(pCfg, "R0Enabled",    false);
     4758#endif
     4759        /*
     4760         * Collect information needed for network booting and add it to the list.
     4761         */
     4762        BootNic     nic;
     4763
     4764        nic.mInstance    = uInstance;
     4765        /* Could be updated by reference, if auto assigned */
     4766        nic.mPCIAddress  = PCIAddr;
     4767
     4768        hrc = networkAdapter->COMGETTER(BootPriority)(&nic.mBootPrio);                  H();
     4769
     4770        llBootNics.push_back(nic);
     4771
     4772        /*
     4773         * The virtual hardware type. PCNet supports three types, E1000 three,
     4774         * but VirtIO only one.
     4775         */
     4776        switch (adapterType)
     4777        {
     4778            case NetworkAdapterType_Am79C970A:
     4779                InsertConfigString(pCfg, "ChipType", "Am79C970A");
     4780                break;
     4781            case NetworkAdapterType_Am79C973:
     4782                InsertConfigString(pCfg, "ChipType", "Am79C973");
     4783                break;
     4784            case NetworkAdapterType_Am79C960:
     4785                InsertConfigString(pCfg, "ChipType", "Am79C960");
     4786                break;
     4787            case NetworkAdapterType_I82540EM:
     4788                InsertConfigInteger(pCfg, "AdapterType", 0);
     4789                break;
     4790            case NetworkAdapterType_I82543GC:
     4791                InsertConfigInteger(pCfg, "AdapterType", 1);
     4792                break;
     4793            case NetworkAdapterType_I82545EM:
     4794                InsertConfigInteger(pCfg, "AdapterType", 2);
     4795                break;
     4796            case NetworkAdapterType_Virtio:
     4797                break;
     4798            case NetworkAdapterType_NE1000:
     4799                InsertConfigString(pCfg, "DeviceType", "NE1000");
     4800                break;
     4801            case NetworkAdapterType_NE2000:
     4802                InsertConfigString(pCfg, "DeviceType", "NE2000");
     4803                break;
     4804            case NetworkAdapterType_WD8003:
     4805                InsertConfigString(pCfg, "DeviceType", "WD8003");
     4806                break;
     4807            case NetworkAdapterType_WD8013:
     4808                InsertConfigString(pCfg, "DeviceType", "WD8013");
     4809                break;
     4810            case NetworkAdapterType_ELNK2:
     4811                InsertConfigString(pCfg, "DeviceType", "3C503");
     4812                break;
     4813            case NetworkAdapterType_ELNK1:
     4814                break;
     4815            case NetworkAdapterType_Null:      AssertFailedBreak(); /* (compiler warnings) */
     4816#ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
     4817            case NetworkAdapterType_32BitHack: AssertFailedBreak(); /* (compiler warnings) */
     4818#endif
     4819        }
     4820
     4821        /*
     4822         * Get the MAC address and convert it to binary representation
     4823         */
     4824        Bstr macAddr;
     4825        hrc = networkAdapter->COMGETTER(MACAddress)(macAddr.asOutParam());              H();
     4826        Assert(!macAddr.isEmpty());
     4827        Utf8Str macAddrUtf8 = macAddr;
     4828#ifdef VBOX_WITH_CLOUD_NET
     4829        NetworkAttachmentType_T eAttachmentType;
     4830        hrc = networkAdapter->COMGETTER(AttachmentType)(&eAttachmentType);                 H();
     4831        if (eAttachmentType == NetworkAttachmentType_Cloud)
     4832        {
     4833            mGateway.setLocalMacAddress(macAddrUtf8);
     4834            /* We'll insert cloud MAC later, when it becomes known. */
     4835        }
     4836        else
     4837        {
     4838#endif
     4839        char *macStr = (char*)macAddrUtf8.c_str();
     4840        Assert(strlen(macStr) == 12);
     4841        RTMAC Mac;
     4842        RT_ZERO(Mac);
     4843        char *pMac = (char*)&Mac;
     4844        for (uint32_t i = 0; i < 6; ++i)
     4845        {
     4846            int c1 = *macStr++ - '0';
     4847            if (c1 > 9)
     4848                c1 -= 7;
     4849            int c2 = *macStr++ - '0';
     4850            if (c2 > 9)
     4851                c2 -= 7;
     4852            *pMac++ = (char)(((c1 & 0x0f) << 4) | (c2 & 0x0f));
     4853        }
     4854        InsertConfigBytes(pCfg, "MAC", &Mac, sizeof(Mac));
     4855#ifdef VBOX_WITH_CLOUD_NET
     4856        }
     4857#endif
     4858        /*
     4859         * Check if the cable is supposed to be unplugged
     4860         */
     4861        BOOL fCableConnected;
     4862        hrc = networkAdapter->COMGETTER(CableConnected)(&fCableConnected);              H();
     4863        InsertConfigInteger(pCfg, "CableConnected", fCableConnected ? 1 : 0);
     4864
     4865        /*
     4866         * Line speed to report from custom drivers
     4867         */
     4868        ULONG ulLineSpeed;
     4869        hrc = networkAdapter->COMGETTER(LineSpeed)(&ulLineSpeed);                       H();
     4870        InsertConfigInteger(pCfg, "LineSpeed", ulLineSpeed);
     4871
     4872        /*
     4873         * Attach the status driver.
     4874         */
     4875        i_attachStatusDriver(pInst, DeviceType_Network);
     4876
     4877        /*
     4878         * Configure the network card now
     4879         */
     4880        bool fIgnoreConnectFailure = mMachineState == MachineState_Restoring;
     4881        int vrc = i_configNetwork(pszAdapterName,
     4882                                  uInstance,
     4883                                  0,
     4884                                  networkAdapter,
     4885                                  pCfg,
     4886                                  pLunL0,
     4887                                  pInst,
     4888                                  false /*fAttachDetach*/,
     4889                                  fIgnoreConnectFailure,
     4890                                  pUVM,
     4891                                  pVMM);
     4892        if (RT_FAILURE(vrc))
     4893            return vrc;
     4894    }
     4895
     4896    return VINF_SUCCESS;
     4897}
     4898
     4899
    46324900int Console::i_configGuestDbg(ComPtr<IVirtualBox> pVBox, ComPtr<IMachine> pMachine, PCFGMNODE pRoot)
    46334901{
  • trunk/src/VBox/Main/src-client/ConsoleImplConfigX86.cpp

    r101468 r101469  
    146146/* Darwin compile kludge */
    147147#undef PVM
    148 
    149 /* Comment out the following line to remove VMWare compatibility hack. */
    150 #define VMWARE_NET_IN_SLOT_11
    151 
    152 /**
    153  * Simple class for storing network boot information.
    154  */
    155 struct BootNic
    156 {
    157     ULONG          mInstance;
    158     PCIBusAddress  mPCIAddress;
    159 
    160     ULONG          mBootPrio;
    161     bool operator < (const BootNic &rhs) const
    162     {
    163         ULONG lval = mBootPrio     - 1; /* 0 will wrap around and get the lowest priority. */
    164         ULONG rval = rhs.mBootPrio - 1;
    165         return lval < rval; /* Zero compares as highest number (lowest prio). */
    166     }
    167 };
    168148
    169149/**
     
    664644    ComPtr<IPlatformProperties> platformProperties;
    665645    virtualBox->GetPlatformProperties(PlatformArchitecture_x86, platformProperties.asOutParam());
    666 
    667     ULONG maxNetworkAdapters;
    668     hrc = platformProperties->GetMaxNetworkAdapters(chipsetType, &maxNetworkAdapters);      H();
    669646
    670647    /*
     
    16711648         * Network adapters
    16721649         */
    1673 #ifdef VMWARE_NET_IN_SLOT_11
    1674         bool fSwapSlots3and11 = false;
    1675 #endif
    1676         PCFGMNODE pDevPCNet = NULL;          /* PCNet-type devices */
    1677         InsertConfigNode(pDevices, "pcnet", &pDevPCNet);
    1678 #ifdef VBOX_WITH_E1000
    1679         PCFGMNODE pDevE1000 = NULL;          /* E1000-type devices */
    1680         InsertConfigNode(pDevices, "e1000", &pDevE1000);
    1681 #endif
    1682 #ifdef VBOX_WITH_VIRTIO
    1683         PCFGMNODE pDevVirtioNet = NULL;          /* Virtio network devices */
    1684         InsertConfigNode(pDevices, "virtio-net", &pDevVirtioNet);
    1685 #endif /* VBOX_WITH_VIRTIO */
    1686         PCFGMNODE pDevDP8390 = NULL;         /* DP8390-type devices */
    1687         InsertConfigNode(pDevices, "dp8390", &pDevDP8390);
    1688         PCFGMNODE pDev3C501 = NULL;          /* EtherLink-type devices */
    1689         InsertConfigNode(pDevices, "3c501",  &pDev3C501);
    1690 
    16911650        std::list<BootNic> llBootNics;
    1692         for (ULONG uInstance = 0; uInstance < maxNetworkAdapters; ++uInstance)
    1693         {
    1694             ComPtr<INetworkAdapter> networkAdapter;
    1695             hrc = pMachine->GetNetworkAdapter(uInstance, networkAdapter.asOutParam());      H();
    1696             BOOL fEnabledNetAdapter = FALSE;
    1697             hrc = networkAdapter->COMGETTER(Enabled)(&fEnabledNetAdapter);                  H();
    1698             if (!fEnabledNetAdapter)
    1699                 continue;
    1700 
    1701             /*
    1702              * The virtual hardware type. Create appropriate device first.
    1703              */
    1704             const char *pszAdapterName = "pcnet";
    1705             NetworkAdapterType_T adapterType;
    1706             hrc = networkAdapter->COMGETTER(AdapterType)(&adapterType);                     H();
    1707             switch (adapterType)
    1708             {
    1709                 case NetworkAdapterType_Am79C970A:
    1710                 case NetworkAdapterType_Am79C973:
    1711                 case NetworkAdapterType_Am79C960:
    1712                     pDev = pDevPCNet;
    1713                     break;
    1714 #ifdef VBOX_WITH_E1000
    1715                 case NetworkAdapterType_I82540EM:
    1716                 case NetworkAdapterType_I82543GC:
    1717                 case NetworkAdapterType_I82545EM:
    1718                     pDev = pDevE1000;
    1719                     pszAdapterName = "e1000";
    1720                     break;
    1721 #endif
    1722 #ifdef VBOX_WITH_VIRTIO
    1723                 case NetworkAdapterType_Virtio:
    1724                     pDev = pDevVirtioNet;
    1725                     pszAdapterName = "virtio-net";
    1726                     break;
    1727 #endif /* VBOX_WITH_VIRTIO */
    1728                 case NetworkAdapterType_NE1000:
    1729                 case NetworkAdapterType_NE2000:
    1730                 case NetworkAdapterType_WD8003:
    1731                 case NetworkAdapterType_WD8013:
    1732                 case NetworkAdapterType_ELNK2:
    1733                     pDev = pDevDP8390;
    1734                     break;
    1735                 case NetworkAdapterType_ELNK1:
    1736                     pDev = pDev3C501;
    1737                     break;
    1738                 default:
    1739                     AssertMsgFailed(("Invalid network adapter type '%d' for slot '%d'", adapterType, uInstance));
    1740                     return pVMM->pfnVMR3SetError(pUVM, VERR_INVALID_PARAMETER, RT_SRC_POS,
    1741                                                  N_("Invalid network adapter type '%d' for slot '%d'"), adapterType, uInstance);
    1742             }
    1743 
    1744             InsertConfigNode(pDev, Utf8StrFmt("%u", uInstance).c_str(), &pInst);
    1745             InsertConfigInteger(pInst, "Trusted",              1); /* boolean */
    1746             /* the first network card gets the PCI ID 3, the next 3 gets 8..10,
    1747              * next 4 get 16..19. */
    1748             int iPCIDeviceNo;
    1749             switch (uInstance)
    1750             {
    1751                 case 0:
    1752                     iPCIDeviceNo = 3;
    1753                     break;
    1754                 case 1: case 2: case 3:
    1755                     iPCIDeviceNo = uInstance - 1 + 8;
    1756                     break;
    1757                 case 4: case 5: case 6: case 7:
    1758                     iPCIDeviceNo = uInstance - 4 + 16;
    1759                     break;
    1760                 default:
    1761                     /* auto assignment */
    1762                     iPCIDeviceNo = -1;
    1763                     break;
    1764             }
    1765 #ifdef VMWARE_NET_IN_SLOT_11
    1766             /*
    1767              * Dirty hack for PCI slot compatibility with VMWare,
    1768              * it assigns slot 0x11 to the first network controller.
    1769              */
    1770             if (iPCIDeviceNo == 3 && adapterType == NetworkAdapterType_I82545EM)
    1771             {
    1772                 iPCIDeviceNo = 0x11;
    1773                 fSwapSlots3and11 = true;
    1774             }
    1775             else if (iPCIDeviceNo == 0x11 && fSwapSlots3and11)
    1776                 iPCIDeviceNo = 3;
    1777 #endif
    1778             PCIBusAddress PCIAddr = PCIBusAddress(0, iPCIDeviceNo, 0);
    1779             hrc = pBusMgr->assignPCIDevice(pszAdapterName, pInst, PCIAddr);                 H();
    1780 
    1781             InsertConfigNode(pInst, "Config", &pCfg);
    1782 #ifdef VBOX_WITH_2X_4GB_ADDR_SPACE   /* not safe here yet. */ /** @todo Make PCNet ring-0 safe on 32-bit mac kernels! */
    1783             if (pDev == pDevPCNet)
    1784                 InsertConfigInteger(pCfg, "R0Enabled",    false);
    1785 #endif
    1786             /*
    1787              * Collect information needed for network booting and add it to the list.
    1788              */
    1789             BootNic     nic;
    1790 
    1791             nic.mInstance    = uInstance;
    1792             /* Could be updated by reference, if auto assigned */
    1793             nic.mPCIAddress  = PCIAddr;
    1794 
    1795             hrc = networkAdapter->COMGETTER(BootPriority)(&nic.mBootPrio);                  H();
    1796 
    1797             llBootNics.push_back(nic);
    1798 
    1799             /*
    1800              * The virtual hardware type. PCNet supports three types, E1000 three,
    1801              * but VirtIO only one.
    1802              */
    1803             switch (adapterType)
    1804             {
    1805                 case NetworkAdapterType_Am79C970A:
    1806                     InsertConfigString(pCfg, "ChipType", "Am79C970A");
    1807                     break;
    1808                 case NetworkAdapterType_Am79C973:
    1809                     InsertConfigString(pCfg, "ChipType", "Am79C973");
    1810                     break;
    1811                 case NetworkAdapterType_Am79C960:
    1812                     InsertConfigString(pCfg, "ChipType", "Am79C960");
    1813                     break;
    1814                 case NetworkAdapterType_I82540EM:
    1815                     InsertConfigInteger(pCfg, "AdapterType", 0);
    1816                     break;
    1817                 case NetworkAdapterType_I82543GC:
    1818                     InsertConfigInteger(pCfg, "AdapterType", 1);
    1819                     break;
    1820                 case NetworkAdapterType_I82545EM:
    1821                     InsertConfigInteger(pCfg, "AdapterType", 2);
    1822                     break;
    1823                 case NetworkAdapterType_Virtio:
    1824                     break;
    1825                 case NetworkAdapterType_NE1000:
    1826                     InsertConfigString(pCfg, "DeviceType", "NE1000");
    1827                     break;
    1828                 case NetworkAdapterType_NE2000:
    1829                     InsertConfigString(pCfg, "DeviceType", "NE2000");
    1830                     break;
    1831                 case NetworkAdapterType_WD8003:
    1832                     InsertConfigString(pCfg, "DeviceType", "WD8003");
    1833                     break;
    1834                 case NetworkAdapterType_WD8013:
    1835                     InsertConfigString(pCfg, "DeviceType", "WD8013");
    1836                     break;
    1837                 case NetworkAdapterType_ELNK2:
    1838                     InsertConfigString(pCfg, "DeviceType", "3C503");
    1839                     break;
    1840                 case NetworkAdapterType_ELNK1:
    1841                     break;
    1842                 case NetworkAdapterType_Null:      AssertFailedBreak(); /* (compiler warnings) */
    1843 #ifdef VBOX_WITH_XPCOM_CPP_ENUM_HACK
    1844                 case NetworkAdapterType_32BitHack: AssertFailedBreak(); /* (compiler warnings) */
    1845 #endif
    1846             }
    1847 
    1848             /*
    1849              * Get the MAC address and convert it to binary representation
    1850              */
    1851             Bstr macAddr;
    1852             hrc = networkAdapter->COMGETTER(MACAddress)(macAddr.asOutParam());              H();
    1853             Assert(!macAddr.isEmpty());
    1854             Utf8Str macAddrUtf8 = macAddr;
    1855 #ifdef VBOX_WITH_CLOUD_NET
    1856             NetworkAttachmentType_T eAttachmentType;
    1857             hrc = networkAdapter->COMGETTER(AttachmentType)(&eAttachmentType);                 H();
    1858             if (eAttachmentType == NetworkAttachmentType_Cloud)
    1859             {
    1860                 mGateway.setLocalMacAddress(macAddrUtf8);
    1861                 /* We'll insert cloud MAC later, when it becomes known. */
    1862             }
    1863             else
    1864             {
    1865 #endif
    1866             char *macStr = (char*)macAddrUtf8.c_str();
    1867             Assert(strlen(macStr) == 12);
    1868             RTMAC Mac;
    1869             RT_ZERO(Mac);
    1870             char *pMac = (char*)&Mac;
    1871             for (uint32_t i = 0; i < 6; ++i)
    1872             {
    1873                 int c1 = *macStr++ - '0';
    1874                 if (c1 > 9)
    1875                     c1 -= 7;
    1876                 int c2 = *macStr++ - '0';
    1877                 if (c2 > 9)
    1878                     c2 -= 7;
    1879                 *pMac++ = (char)(((c1 & 0x0f) << 4) | (c2 & 0x0f));
    1880             }
    1881             InsertConfigBytes(pCfg, "MAC", &Mac, sizeof(Mac));
    1882 #ifdef VBOX_WITH_CLOUD_NET
    1883             }
    1884 #endif
    1885             /*
    1886              * Check if the cable is supposed to be unplugged
    1887              */
    1888             BOOL fCableConnected;
    1889             hrc = networkAdapter->COMGETTER(CableConnected)(&fCableConnected);              H();
    1890             InsertConfigInteger(pCfg, "CableConnected", fCableConnected ? 1 : 0);
    1891 
    1892             /*
    1893              * Line speed to report from custom drivers
    1894              */
    1895             ULONG ulLineSpeed;
    1896             hrc = networkAdapter->COMGETTER(LineSpeed)(&ulLineSpeed);                       H();
    1897             InsertConfigInteger(pCfg, "LineSpeed", ulLineSpeed);
    1898 
    1899             /*
    1900              * Attach the status driver.
    1901              */
    1902             i_attachStatusDriver(pInst, DeviceType_Network);
    1903 
    1904             /*
    1905              * Configure the network card now
    1906              */
    1907             bool fIgnoreConnectFailure = mMachineState == MachineState_Restoring;
    1908             vrc = i_configNetwork(pszAdapterName,
    1909                                   uInstance,
    1910                                   0,
    1911                                   networkAdapter,
    1912                                   pCfg,
    1913                                   pLunL0,
    1914                                   pInst,
    1915                                   false /*fAttachDetach*/,
    1916                                   fIgnoreConnectFailure,
    1917                                   pUVM,
    1918                                   pVMM);
    1919             if (RT_FAILURE(vrc))
    1920                 return vrc;
    1921         }
     1651        vrc = i_configNetworkCtrls(pMachine, platformProperties, chipsetType, pBusMgr,
     1652                                   pVMM, pUVM, pDevices, llBootNics);                        VRC();
    19221653
    19231654        /*
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette