Changeset 83169 in vbox for trunk/src/VBox/Frontends/VBoxManage
- Timestamp:
- Feb 27, 2020 9:28:41 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 136290
- Location:
- trunk/src/VBox/Frontends/VBoxManage
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk
r82968 r83169 32 32 $(if $(VBOX_WITH_HOSTNETIF_API), VBOX_WITH_HOSTNETIF_API) \ 33 33 $(if $(VBOX_WITH_NETFLT), VBOX_WITH_NETFLT) \ 34 $(if $(VBOX_WITH_CLOUD_NET), VBOX_WITH_CLOUD_NET) \ 34 35 $(if $(VBOX_WITH_AUDIO_OSS), VBOX_WITH_AUDIO_OSS) \ 35 36 $(if $(VBOX_WITH_AUDIO_ALSA), VBOX_WITH_AUDIO_ALSA) \ -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageCloud.cpp
r82968 r83169 1599 1599 } 1600 1600 1601 #ifdef VBOX_WITH_CLOUD_NET 1602 struct CloudNetworkOptions 1603 { 1604 BOOL fEnable; 1605 BOOL fDisable; 1606 Bstr strNetworkId; 1607 Bstr strNetworkName; 1608 }; 1609 typedef struct CloudNetworkOptions CLOUDNETOPT; 1610 typedef CLOUDNETOPT *PCLOUDNETOPT; 1611 1612 static RTEXITCODE createUpdateCloudNetworkCommon(ComPtr<ICloudNetwork> cloudNetwork, CLOUDNETOPT& options, PCLOUDCOMMONOPT pCommonOpts) 1613 { 1614 HRESULT hrc = S_OK; 1615 1616 Bstr strProvider = pCommonOpts->provider.pszProviderName; 1617 Bstr strProfile = pCommonOpts->profile.pszProfileName; 1618 1619 if (options.fEnable) 1620 CHECK_ERROR2_RET(hrc, cloudNetwork, COMSETTER(Enabled)(TRUE), RTEXITCODE_FAILURE); 1621 if (options.fDisable) 1622 CHECK_ERROR2_RET(hrc, cloudNetwork, COMSETTER(Enabled)(FALSE), RTEXITCODE_FAILURE); 1623 if (options.strNetworkId.isNotEmpty()) 1624 CHECK_ERROR2_RET(hrc, cloudNetwork, COMSETTER(NetworkId)(options.strNetworkId.raw()), RTEXITCODE_FAILURE); 1625 if (strProvider.isNotEmpty()) 1626 CHECK_ERROR2_RET(hrc, cloudNetwork, COMSETTER(Provider)(strProvider.raw()), RTEXITCODE_FAILURE); 1627 if (strProfile.isNotEmpty()) 1628 CHECK_ERROR2_RET(hrc, cloudNetwork, COMSETTER(Profile)(strProfile.raw()), RTEXITCODE_FAILURE); 1629 1630 return RTEXITCODE_SUCCESS; 1631 } 1632 1633 1634 static RTEXITCODE createCloudNetwork(HandlerArg *a, int iFirst, PCLOUDCOMMONOPT pCommonOpts) 1635 { 1636 HRESULT hrc = S_OK; 1637 hrc = checkAndSetCommonOptions(a, pCommonOpts); 1638 if (FAILED(hrc)) 1639 return RTEXITCODE_FAILURE; 1640 1641 /* Required parameters, the rest is handled in update */ 1642 static const RTGETOPTDEF s_aOptions[] = 1643 { 1644 { "--disable", 'd', RTGETOPT_REQ_NOTHING }, 1645 { "--enable", 'e', RTGETOPT_REQ_NOTHING }, 1646 { "--network-id", 'i', RTGETOPT_REQ_STRING }, 1647 { "--name", 'n', RTGETOPT_REQ_STRING }, 1648 }; 1649 1650 RTGETOPTSTATE GetState; 1651 RTGETOPTUNION ValueUnion; 1652 int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0); 1653 AssertRCReturn(vrc, RTEXITCODE_FAILURE); 1654 1655 CLOUDNETOPT options; 1656 options.fEnable = FALSE; 1657 options.fDisable = FALSE; 1658 1659 int c; 1660 while ((c = RTGetOpt(&GetState, &ValueUnion)) != 0) 1661 { 1662 switch (c) 1663 { 1664 case 'd': 1665 options.fDisable = TRUE; 1666 break; 1667 case 'e': 1668 options.fEnable = TRUE; 1669 break; 1670 case 'i': 1671 options.strNetworkId=ValueUnion.psz; 1672 break; 1673 case 'n': 1674 options.strNetworkName=ValueUnion.psz; 1675 break; 1676 case VINF_GETOPT_NOT_OPTION: 1677 return errorUnknownSubcommand(ValueUnion.psz); 1678 default: 1679 return errorGetOpt(c, &ValueUnion); 1680 } 1681 } 1682 1683 if (options.strNetworkName.isEmpty()) 1684 return errorArgument("Missing --name parameter"); 1685 if (options.strNetworkId.isEmpty()) 1686 return errorArgument("Missing --network-id parameter"); 1687 1688 ComPtr<IVirtualBox> pVirtualBox = a->virtualBox; 1689 1690 ComPtr<ICloudNetwork> cloudNetwork; 1691 CHECK_ERROR2_RET(hrc, pVirtualBox, 1692 CreateCloudNetwork(options.strNetworkName.raw(), cloudNetwork.asOutParam()), 1693 RTEXITCODE_FAILURE); 1694 1695 /* Fill out the created network */ 1696 RTEXITCODE rc = createUpdateCloudNetworkCommon(cloudNetwork, options, pCommonOpts); 1697 if (RT_SUCCESS(rc)) 1698 RTPrintf("Cloud network was created successfully\n"); 1699 1700 return rc; 1701 } 1702 1703 1704 static RTEXITCODE showCloudNetworkInfo(HandlerArg *a, int iFirst, PCLOUDCOMMONOPT pCommonOpts) 1705 { 1706 RT_NOREF(pCommonOpts); 1707 HRESULT hrc = S_OK; 1708 static const RTGETOPTDEF s_aOptions[] = 1709 { 1710 { "--name", 'n', RTGETOPT_REQ_STRING }, 1711 }; 1712 RTGETOPTSTATE GetState; 1713 RTGETOPTUNION ValueUnion; 1714 int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0); 1715 AssertRCReturn(vrc, RTEXITCODE_FAILURE); 1716 1717 Bstr strNetworkName; 1718 1719 int c; 1720 while ((c = RTGetOpt(&GetState, &ValueUnion)) != 0) 1721 { 1722 switch (c) 1723 { 1724 case 'n': 1725 strNetworkName=ValueUnion.psz; 1726 break; 1727 case VINF_GETOPT_NOT_OPTION: 1728 return errorUnknownSubcommand(ValueUnion.psz); 1729 default: 1730 return errorGetOpt(c, &ValueUnion); 1731 } 1732 } 1733 1734 if (strNetworkName.isEmpty()) 1735 return errorArgument("Missing --name parameter"); 1736 1737 ComPtr<IVirtualBox> pVirtualBox = a->virtualBox; 1738 ComPtr<ICloudNetwork> cloudNetwork; 1739 CHECK_ERROR2_RET(hrc, pVirtualBox, 1740 FindCloudNetworkByName(strNetworkName.raw(), cloudNetwork.asOutParam()), 1741 RTEXITCODE_FAILURE); 1742 1743 RTPrintf("Name: %ls\n", strNetworkName.raw()); 1744 BOOL fEnabled = FALSE; 1745 cloudNetwork->COMGETTER(Enabled)(&fEnabled); 1746 RTPrintf("State: %s\n", fEnabled ? "Enabled" : "Disabled"); 1747 Bstr Provider; 1748 cloudNetwork->COMGETTER(Provider)(Provider.asOutParam()); 1749 RTPrintf("CloudProvider: %ls\n", Provider.raw()); 1750 Bstr Profile; 1751 cloudNetwork->COMGETTER(Profile)(Profile.asOutParam()); 1752 RTPrintf("CloudProfile: %ls\n", Profile.raw()); 1753 Bstr NetworkId; 1754 cloudNetwork->COMGETTER(NetworkId)(NetworkId.asOutParam()); 1755 RTPrintf("CloudNetworkId: %ls\n", NetworkId.raw()); 1756 Bstr netName = BstrFmt("cloud-%ls", strNetworkName.raw()); 1757 RTPrintf("VBoxNetworkName: %ls\n\n", netName.raw()); 1758 1759 return RTEXITCODE_SUCCESS; 1760 } 1761 1762 1763 static RTEXITCODE updateCloudNetwork(HandlerArg *a, int iFirst, PCLOUDCOMMONOPT pCommonOpts) 1764 { 1765 HRESULT hrc = S_OK; 1766 1767 static const RTGETOPTDEF s_aOptions[] = 1768 { 1769 { "--disable", 'd', RTGETOPT_REQ_NOTHING }, 1770 { "--enable", 'e', RTGETOPT_REQ_NOTHING }, 1771 { "--network-id", 'i', RTGETOPT_REQ_STRING }, 1772 { "--name", 'n', RTGETOPT_REQ_STRING }, 1773 }; 1774 1775 RTGETOPTSTATE GetState; 1776 RTGETOPTUNION ValueUnion; 1777 int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0); 1778 AssertRCReturn(vrc, RTEXITCODE_FAILURE); 1779 1780 CLOUDNETOPT options; 1781 options.fEnable = FALSE; 1782 options.fDisable = FALSE; 1783 1784 int c; 1785 while ((c = RTGetOpt(&GetState, &ValueUnion)) != 0) 1786 { 1787 switch (c) 1788 { 1789 case 'd': 1790 options.fDisable = TRUE; 1791 break; 1792 case 'e': 1793 options.fEnable = TRUE; 1794 break; 1795 case 'i': 1796 options.strNetworkId=ValueUnion.psz; 1797 break; 1798 case 'n': 1799 options.strNetworkName=ValueUnion.psz; 1800 break; 1801 case VINF_GETOPT_NOT_OPTION: 1802 return errorUnknownSubcommand(ValueUnion.psz); 1803 default: 1804 return errorGetOpt(c, &ValueUnion); 1805 } 1806 } 1807 1808 if (options.strNetworkName.isEmpty()) 1809 return errorArgument("Missing --name parameter"); 1810 1811 ComPtr<IVirtualBox> pVirtualBox = a->virtualBox; 1812 ComPtr<ICloudNetwork> cloudNetwork; 1813 CHECK_ERROR2_RET(hrc, pVirtualBox, 1814 FindCloudNetworkByName(options.strNetworkName.raw(), cloudNetwork.asOutParam()), 1815 RTEXITCODE_FAILURE); 1816 1817 RTEXITCODE rc = createUpdateCloudNetworkCommon(cloudNetwork, options, pCommonOpts); 1818 if (RT_SUCCESS(rc)) 1819 RTPrintf("Cloud network %ls was updated successfully\n", options.strNetworkName.raw()); 1820 1821 return rc; 1822 } 1823 1824 1825 static RTEXITCODE deleteCloudNetwork(HandlerArg *a, int iFirst, PCLOUDCOMMONOPT pCommonOpts) 1826 { 1827 RT_NOREF(pCommonOpts); 1828 HRESULT hrc = S_OK; 1829 static const RTGETOPTDEF s_aOptions[] = 1830 { 1831 { "--name", 'n', RTGETOPT_REQ_STRING }, 1832 }; 1833 RTGETOPTSTATE GetState; 1834 RTGETOPTUNION ValueUnion; 1835 int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0); 1836 AssertRCReturn(vrc, RTEXITCODE_FAILURE); 1837 1838 Bstr strNetworkName; 1839 1840 int c; 1841 while ((c = RTGetOpt(&GetState, &ValueUnion)) != 0) 1842 { 1843 switch (c) 1844 { 1845 case 'n': 1846 strNetworkName=ValueUnion.psz; 1847 break; 1848 case VINF_GETOPT_NOT_OPTION: 1849 return errorUnknownSubcommand(ValueUnion.psz); 1850 default: 1851 return errorGetOpt(c, &ValueUnion); 1852 } 1853 } 1854 1855 if (strNetworkName.isEmpty()) 1856 return errorArgument("Missing --name parameter"); 1857 1858 ComPtr<IVirtualBox> pVirtualBox = a->virtualBox; 1859 ComPtr<ICloudNetwork> cloudNetwork; 1860 CHECK_ERROR2_RET(hrc, pVirtualBox, 1861 FindCloudNetworkByName(strNetworkName.raw(), cloudNetwork.asOutParam()), 1862 RTEXITCODE_FAILURE); 1863 1864 CHECK_ERROR2_RET(hrc, pVirtualBox, 1865 RemoveCloudNetwork(cloudNetwork), 1866 RTEXITCODE_FAILURE); 1867 1868 if (SUCCEEDED(hrc)) 1869 RTPrintf("Cloud network %ls was deleted successfully\n", strNetworkName.raw()); 1870 1871 return SUCCEEDED(hrc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE; 1872 } 1873 1874 1875 static RTEXITCODE handleCloudNetwork(HandlerArg *a, int iFirst, PCLOUDCOMMONOPT pCommonOpts) 1876 { 1877 if (a->argc < 1) 1878 return errorNoSubcommand(); 1879 1880 static const RTGETOPTDEF s_aOptions[] = 1881 { 1882 { "create", 1000, RTGETOPT_REQ_NOTHING }, 1883 { "info", 1001, RTGETOPT_REQ_NOTHING }, 1884 { "update", 1002, RTGETOPT_REQ_NOTHING }, 1885 { "delete", 1003, RTGETOPT_REQ_NOTHING } 1886 }; 1887 1888 RTGETOPTSTATE GetState; 1889 int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0); 1890 AssertRCReturn(vrc, RTEXITCODE_FAILURE); 1891 1892 int c; 1893 RTGETOPTUNION ValueUnion; 1894 while ((c = RTGetOpt(&GetState, &ValueUnion)) != 0) 1895 { 1896 switch (c) 1897 { 1898 /* Sub-commands: */ 1899 case 1000: 1900 return createCloudNetwork(a, GetState.iNext, pCommonOpts); 1901 case 1001: 1902 return showCloudNetworkInfo(a, GetState.iNext, pCommonOpts); 1903 case 1002: 1904 return updateCloudNetwork(a, GetState.iNext, pCommonOpts); 1905 case 1003: 1906 return deleteCloudNetwork(a, GetState.iNext, pCommonOpts); 1907 case VINF_GETOPT_NOT_OPTION: 1908 return errorUnknownSubcommand(ValueUnion.psz); 1909 1910 default: 1911 return errorGetOpt(c, &ValueUnion); 1912 } 1913 } 1914 1915 return errorNoSubcommand(); 1916 } 1917 #endif /* VBOX_WITH_CLOUD_NET */ 1918 1919 1601 1920 RTEXITCODE handleCloud(HandlerArg *a) 1602 1921 { … … 1641 1960 case 1002: 1642 1961 return handleCloudInstance(a, GetState.iNext, &commonOpts); 1962 #ifdef VBOX_WITH_CLOUD_NET 1963 case 1003: 1964 return handleCloudNetwork(a, GetState.iNext, &commonOpts); 1965 #endif /* VBOX_WITH_CLOUD_NET */ 1643 1966 case VINF_GETOPT_NOT_OPTION: 1644 1967 return errorUnknownSubcommand(ValueUnion.psz); -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
r82968 r83169 193 193 return rc; 194 194 } 195 196 197 #ifdef VBOX_WITH_CLOUD_NET 198 /** 199 * List configured cloud network attachments. 200 * 201 * @returns See produceList. 202 * @param pVirtualBox Reference to the IVirtualBox smart pointer. 203 * @param Reserved Placeholder! 204 */ 205 static HRESULT listCloudNetworks(const ComPtr<IVirtualBox> pVirtualBox) 206 { 207 HRESULT rc; 208 com::SafeIfaceArray<ICloudNetwork> cloudNetworks; 209 CHECK_ERROR(pVirtualBox, COMGETTER(CloudNetworks)(ComSafeArrayAsOutParam(cloudNetworks))); 210 for (size_t i = 0; i < cloudNetworks.size(); ++i) 211 { 212 ComPtr<ICloudNetwork> cloudNetwork = cloudNetworks[i]; 213 Bstr networkName; 214 cloudNetwork->COMGETTER(NetworkName)(networkName.asOutParam()); 215 RTPrintf("Name: %ls\n", networkName.raw()); 216 // Guid interfaceGuid; 217 // cloudNetwork->COMGETTER(Id)(interfaceGuid.asOutParam()); 218 // RTPrintf("GUID: %ls\n\n", Bstr(interfaceGuid.toString()).raw()); 219 BOOL fEnabled = FALSE; 220 cloudNetwork->COMGETTER(Enabled)(&fEnabled); 221 RTPrintf("State: %s\n", fEnabled ? "Enabled" : "Disabled"); 222 223 Bstr Provider; 224 cloudNetwork->COMGETTER(Provider)(Provider.asOutParam()); 225 RTPrintf("CloudProvider: %ls\n", Provider.raw()); 226 Bstr Profile; 227 cloudNetwork->COMGETTER(Profile)(Profile.asOutParam()); 228 RTPrintf("CloudProfile: %ls\n", Profile.raw()); 229 Bstr NetworkId; 230 cloudNetwork->COMGETTER(NetworkId)(NetworkId.asOutParam()); 231 RTPrintf("CloudNetworkId: %ls\n", NetworkId.raw()); 232 Bstr netName = BstrFmt("cloud-%ls", networkName.raw()); 233 RTPrintf("VBoxNetworkName: %ls\n\n", netName.raw()); 234 } 235 return rc; 236 } 237 #endif /* VBOX_WITH_CLOUD_NET */ 195 238 196 239 … … 1269 1312 kListHostOnlyInterfaces, 1270 1313 #endif 1314 #if defined(VBOX_WITH_CLOUD_NET) 1315 kListCloudNetworks, 1316 #endif 1271 1317 kListHostCpuIDs, 1272 1318 kListHostInfo, … … 1476 1522 break; 1477 1523 1524 #if defined(VBOX_WITH_CLOUD_NET) 1525 case kListCloudNetworks: 1526 rc = listCloudNetworks(pVirtualBox); 1527 break; 1528 #endif 1478 1529 case kListHostInfo: 1479 1530 rc = listHostInfo(pVirtualBox); … … 1669 1720 { "hostonlyifs", kListHostOnlyInterfaces, RTGETOPT_REQ_NOTHING }, 1670 1721 #endif 1722 #if defined(VBOX_WITH_CLOUD_NET) 1723 { "cloudnets", kListCloudNetworks, RTGETOPT_REQ_NOTHING }, 1724 #endif 1671 1725 { "natnetworks", kListNatNetworks, RTGETOPT_REQ_NOTHING }, 1672 1726 { "natnets", kListNatNetworks, RTGETOPT_REQ_NOTHING }, … … 1722 1776 #if defined(VBOX_WITH_NETFLT) 1723 1777 case kListHostOnlyInterfaces: 1778 #endif 1779 #if defined(VBOX_WITH_CLOUD_NET) 1780 case kListCloudNetworks: 1724 1781 #endif 1725 1782 case kListHostInfo:
Note:
See TracChangeset
for help on using the changeset viewer.