VirtualBox

source: vbox/trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h@ 100923

Last change on this file since 100923 was 99775, checked in by vboxsync, 19 months ago

*: Mark functions as static if not used outside of a given compilation unit. Enables the compiler to optimize inlining, reduces the symbol tables, exposes unused functions and in some rare cases exposes mismtaches between function declarations and definitions, but most importantly reduces the number of parfait reports for the extern-function-no-forward-declaration category. This should not result in any functional changes, bugref:3409

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.2 KB
Line 
1/* $Id: VBoxManage.h 99775 2023-05-12 12:21:58Z vboxsync $ */
2/** @file
3 * VBoxManage - VirtualBox command-line interface, internal header file.
4 */
5
6/*
7 * Copyright (C) 2006-2023 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef VBOX_INCLUDED_SRC_VBoxManage_VBoxManage_h
29#define VBOX_INCLUDED_SRC_VBoxManage_VBoxManage_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include <VBox/com/com.h>
35#include <VBox/com/ptr.h>
36#include <VBox/com/VirtualBox.h>
37#include <VBox/com/string.h>
38#include <VBox/com/array.h>
39
40#include <iprt/types.h>
41#include <iprt/message.h>
42#include <iprt/stream.h>
43#include <iprt/getopt.h>
44
45#include "VBoxManageBuiltInHelp.h"
46#include "PasswordInput.h"
47
48#ifdef VBOX_WITH_VBOXMANAGE_NLS
49# include "VirtualBoxTranslator.h"
50#endif
51
52
53////////////////////////////////////////////////////////////////////////////////
54//
55// definitions
56//
57////////////////////////////////////////////////////////////////////////////////
58
59/**
60 * This defines a a_CtxName::tr function that gives the translator context as
61 * well as providing a shorter way to call VirtualBoxTranslator::translate.
62 */
63#ifdef VBOX_WITH_VBOXMANAGE_NLS
64# define DECLARE_TRANSLATION_CONTEXT(a_CtxName) \
65struct a_CtxName \
66{ \
67 static const char *tr(const char *pszSource, const char *pszComment = NULL, const size_t uNum = ~(size_t)0) \
68 { \
69 return VirtualBoxTranslator::translate(NULL, #a_CtxName, pszSource, pszComment, uNum); \
70 } \
71}
72#else
73# define DECLARE_TRANSLATION_CONTEXT(a_CtxName) \
74struct a_CtxName \
75{ \
76 static const char *tr(const char *pszSource, const char *pszComment = NULL, const size_t uNum = ~(size_t)0) \
77 { \
78 RT_NOREF(pszComment, uNum); \
79 return pszSource; \
80 } \
81}
82#endif
83
84/**
85 * Defines an option with two variants, producing two RTGETOPTDEF entries.
86 *
87 * This is mainly for replacing character-soup option names like
88 * --natlocalhostreachable and --biossystemtimeoffset with more easily parsed
89 * ones, like --nat-localhost-reachable and --bios-system-time-offset, without
90 * removing the legacy name.
91 */
92#define OPT2(a_pszWordDashWord, a_pszWordSoup, a_chOptOrValue, a_fFlags) \
93 { a_pszWordDashWord, a_chOptOrValue, a_fFlags }, \
94 { a_pszWordSoup, a_chOptOrValue, a_fFlags }
95
96/** A single option variant of OPT2 for better looking tables. */
97#define OPT1(a_pszOption, a_chOptOrValue, a_fFlags) \
98 { a_pszOption, a_chOptOrValue, a_fFlags }
99
100
101/** command handler argument */
102struct HandlerArg
103{
104 int argc;
105 char **argv;
106
107 ComPtr<IVirtualBox> virtualBox;
108 ComPtr<ISession> session;
109};
110
111
112/** showVMInfo details */
113typedef enum
114{
115 VMINFO_NONE = 0,
116 VMINFO_STANDARD = 1, /**< standard details */
117 VMINFO_FULL = 2, /**< both */
118 VMINFO_MACHINEREADABLE = 3, /**< both, and make it machine readable */
119 VMINFO_COMPACT = 4
120} VMINFO_DETAILS;
121
122
123////////////////////////////////////////////////////////////////////////////////
124//
125// global variables
126//
127////////////////////////////////////////////////////////////////////////////////
128
129extern bool g_fDetailedProgress; // in VBoxManage.cpp
130
131
132////////////////////////////////////////////////////////////////////////////////
133//
134// prototypes
135//
136////////////////////////////////////////////////////////////////////////////////
137
138/* VBoxManageHelp.cpp */
139void setCurrentCommand(enum HELP_CMD_VBOXMANAGE enmCommand);
140void setCurrentSubcommand(uint64_t fCurSubcommandScope);
141
142void printUsage(PRTSTREAM pStrm);
143void printHelp(PRTSTREAM pStrm);
144RTEXITCODE errorNoSubcommand(void);
145RTEXITCODE errorUnknownSubcommand(const char *pszSubCmd);
146RTEXITCODE errorTooManyParameters(char **papszArgs);
147RTEXITCODE errorGetOpt(int rcGetOpt, union RTGETOPTUNION const *pValueUnion);
148RTEXITCODE errorFetchValue(int iValueNo, const char *pszOption, int rcGetOptFetchValue, union RTGETOPTUNION const *pValueUnion);
149RTEXITCODE errorSyntax(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2);
150RTEXITCODE errorSyntaxV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(1, 0);
151HRESULT errorSyntaxHr(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2);
152RTEXITCODE errorArgument(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2);
153HRESULT errorArgumentHr(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2);
154
155# define SHOW_PROGRESS_NONE 0
156# define SHOW_PROGRESS_DESC RT_BIT_32(0)
157# define SHOW_PROGRESS RT_BIT_32(1)
158# define SHOW_PROGRESS_DETAILS RT_BIT_32(2)
159HRESULT showProgress(ComPtr<IProgress> progress, uint32_t fFlags = SHOW_PROGRESS);
160
161/* VBoxManage.cpp */
162void showLogo(PRTSTREAM pStrm);
163
164/* VBoxInternalManage.cpp */
165DECLHIDDEN(void) printUsageInternalCmds(PRTSTREAM pStrm);
166RTEXITCODE handleInternalCommands(HandlerArg *a);
167
168/* VBoxManageControlVM.cpp */
169RTEXITCODE handleControlVM(HandlerArg *a);
170
171/* VBoxManageModifyVM.cpp */
172void parseGroups(const char *pcszGroups, com::SafeArray<BSTR> *pGroups);
173#ifdef VBOX_WITH_RECORDING
174int parseScreens(const char *pcszScreens, com::SafeArray<BOOL> *pScreens);
175#endif
176RTEXITCODE handleModifyVM(HandlerArg *a);
177VMProcPriority_T nameToVMProcPriority(const char *pszName);
178
179/* VBoxManageDebugVM.cpp */
180RTEXITCODE handleDebugVM(HandlerArg *a);
181
182/* VBoxManageGuestProp.cpp */
183RTEXITCODE handleGuestProperty(HandlerArg *a);
184
185/* VBoxManageGuestCtrl.cpp */
186RTEXITCODE handleGuestControl(HandlerArg *a);
187
188/* VBoxManageVMInfo.cpp */
189HRESULT showSnapshots(ComPtr<ISnapshot> &rootSnapshot,
190 ComPtr<ISnapshot> &currentSnapshot,
191 VMINFO_DETAILS details,
192 const com::Utf8Str &prefix = "",
193 int level = 0);
194RTEXITCODE handleShowVMInfo(HandlerArg *a);
195HRESULT showVMInfo(ComPtr<IVirtualBox> pVirtualBox,
196 ComPtr<IMachine> pMachine,
197 ComPtr<ISession> pSession,
198 VMINFO_DETAILS details = VMINFO_NONE);
199const char *machineStateToName(MachineState_T machineState, bool fShort);
200HRESULT showBandwidthGroups(ComPtr<IBandwidthControl> &bwCtrl,
201 VMINFO_DETAILS details);
202void outputMachineReadableString(const char *pszName, const char *pszValue, bool fQuoteName = false, bool fNewline = true);
203void outputMachineReadableString(const char *pszName, com::Bstr const *pbstrValue, bool fQuoteName = false, bool fNewline = true);
204void outputMachineReadableStringWithFmtName(const char *pszValue, bool fQuoteName, const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR(3, 4);
205void outputMachineReadableStringWithFmtName(com::Bstr const *pbstrValue, bool fQuoteName, const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR(3, 4);
206void outputMachineReadableBool(const char *pszName, BOOL const *pfValue);
207void outputMachineReadableBool(const char *pszName, bool const *pfValue);
208void outputMachineReadableULong(const char *pszName, ULONG *uValue);
209void outputMachineReadableLong64(const char *pszName, LONG64 *uValue);
210
211/* VBoxManageList.cpp */
212RTEXITCODE handleList(HandlerArg *a);
213
214/* VBoxManageMetrics.cpp */
215RTEXITCODE handleMetrics(HandlerArg *a);
216
217/* VBoxManageMisc.cpp */
218RTEXITCODE handleRegisterVM(HandlerArg *a);
219RTEXITCODE handleUnregisterVM(HandlerArg *a);
220RTEXITCODE handleCreateVM(HandlerArg *a);
221RTEXITCODE handleCloneVM(HandlerArg *a);
222RTEXITCODE handleStartVM(HandlerArg *a);
223#ifdef VBOX_WITH_FULL_VM_ENCRYPTION
224RTEXITCODE handleEncryptVM(HandlerArg *a);
225#endif
226RTEXITCODE handleDiscardState(HandlerArg *a);
227RTEXITCODE handleAdoptState(HandlerArg *a);
228RTEXITCODE handleGetExtraData(HandlerArg *a);
229RTEXITCODE handleSetExtraData(HandlerArg *a);
230RTEXITCODE handleSetProperty(HandlerArg *a);
231RTEXITCODE handleSharedFolder(HandlerArg *a);
232RTEXITCODE handleExtPack(HandlerArg *a);
233RTEXITCODE handleUnattended(HandlerArg *a);
234RTEXITCODE handleMoveVM(HandlerArg *a);
235RTEXITCODE handleCloudProfile(HandlerArg *a);
236
237/* VBoxManageDisk.cpp */
238HRESULT openMedium(HandlerArg *a, const char *pszFilenameOrUuid,
239 DeviceType_T enmDevType, AccessMode_T enmAccessMode,
240 ComPtr<IMedium> &pMedium, bool fForceNewUuidOnOpen,
241 bool fSilent);
242RTEXITCODE handleCreateMedium(HandlerArg *a);
243RTEXITCODE handleModifyMedium(HandlerArg *a);
244RTEXITCODE handleCloneMedium(HandlerArg *a);
245RTEXITCODE handleMediumProperty(HandlerArg *a);
246RTEXITCODE handleEncryptMedium(HandlerArg *a);
247RTEXITCODE handleCheckMediumPassword(HandlerArg *a);
248RTEXITCODE handleConvertFromRaw(HandlerArg *a);
249HRESULT showMediumInfo(const ComPtr<IVirtualBox> &pVirtualBox,
250 const ComPtr<IMedium> &pMedium,
251 const char *pszParentUUID,
252 bool fOptLong);
253RTEXITCODE handleShowMediumInfo(HandlerArg *a);
254RTEXITCODE handleCloseMedium(HandlerArg *a);
255RTEXITCODE handleMediumIO(HandlerArg *a);
256int parseMediumType(const char *psz, MediumType_T *penmMediumType);
257int parseBool(const char *psz, bool *pb);
258
259/* VBoxManageStorageController.cpp */
260RTEXITCODE handleStorageAttach(HandlerArg *a);
261RTEXITCODE handleStorageController(HandlerArg *a);
262
263// VBoxManageAppliance.cpp
264RTEXITCODE handleImportAppliance(HandlerArg *a);
265RTEXITCODE handleExportAppliance(HandlerArg *a);
266RTEXITCODE handleSignAppliance(HandlerArg *a);
267
268// VBoxManageSnapshot.cpp
269RTEXITCODE handleSnapshot(HandlerArg *a);
270
271/* VBoxManageUSB.cpp */
272RTEXITCODE handleUSBFilter(HandlerArg *a);
273RTEXITCODE handleUSBDevSource(HandlerArg *a);
274
275/* VBoxManageHostonly.cpp */
276RTEXITCODE handleHostonlyIf(HandlerArg *a);
277#ifdef VBOX_WITH_VMNET
278RTEXITCODE handleHostonlyNet(HandlerArg *a);
279#endif /* VBOX_WITH_VMNET */
280
281/* VBoxManageDHCPServer.cpp */
282RTEXITCODE handleDHCPServer(HandlerArg *a);
283
284/* VBoxManageNATNetwork.cpp */
285RTEXITCODE handleNATNetwork(HandlerArg *a);
286RTEXITCODE listNATNetworks(bool fLong, bool fSorted,
287 const ComPtr<IVirtualBox> &pVirtualBox);
288
289/* VBoxManageBandwidthControl.cpp */
290RTEXITCODE handleBandwidthControl(HandlerArg *a);
291
292/* VBoxManageCloud.cpp */
293RTEXITCODE handleCloud(HandlerArg *a);
294
295/* VBoxManageCloudMachine.cpp */
296RTEXITCODE handleCloudMachine(HandlerArg *a, int iFirst,
297 const char *pcszProviderName,
298 const char *pcszProfileName);
299RTEXITCODE listCloudMachines(HandlerArg *a, int iFirst,
300 const char *pcszProviderName,
301 const char *pcszProfileName);
302RTEXITCODE handleCloudShowVMInfo(HandlerArg *a, int iFirst,
303 const char *pcszProviderName,
304 const char *pcszProfileName);
305
306#ifdef VBOX_WITH_UPDATE_AGENT
307/* VBoxManageUpdateCheck.cpp */
308RTEXITCODE handleUpdateCheck(HandlerArg *a);
309#endif
310
311/* VBoxManageModifyNvram.cpp */
312RTEXITCODE handleModifyNvram(HandlerArg *a);
313
314#endif /* !VBOX_INCLUDED_SRC_VBoxManage_VBoxManage_h */
Note: See TracBrowser for help on using the repository browser.

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