VirtualBox

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

Last change on this file since 82968 was 82968, checked in by vboxsync, 5 years ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.1 KB
Line 
1/* $Id: VBoxManage.h 82968 2020-02-04 10:35:17Z vboxsync $ */
2/** @file
3 * VBoxManage - VirtualBox command-line interface, internal header file.
4 */
5
6/*
7 * Copyright (C) 2006-2020 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef VBOX_INCLUDED_SRC_VBoxManage_VBoxManage_h
19#define VBOX_INCLUDED_SRC_VBoxManage_VBoxManage_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#ifndef VBOX_ONLY_DOCS
25#include <VBox/com/com.h>
26#include <VBox/com/ptr.h>
27#include <VBox/com/VirtualBox.h>
28#include <VBox/com/string.h>
29#include <VBox/com/array.h>
30#endif /* !VBOX_ONLY_DOCS */
31
32#include <iprt/types.h>
33#include <iprt/message.h>
34#include <iprt/stream.h>
35#include <iprt/getopt.h>
36
37#ifndef VBOX_ONLY_DOCS
38# include "VBoxManageBuiltInHelp.h"
39# include "PasswordInput.h"
40#endif
41
42
43////////////////////////////////////////////////////////////////////////////////
44//
45// definitions
46//
47////////////////////////////////////////////////////////////////////////////////
48
49/** @name Syntax diagram category, i.e. the command.
50 * @{ */
51typedef enum
52{
53 USAGE_INVALID = 0,
54 USAGE_LIST,
55 USAGE_SHOWVMINFO,
56 USAGE_REGISTERVM,
57 USAGE_UNREGISTERVM,
58 USAGE_CREATEVM,
59 USAGE_MODIFYVM,
60 USAGE_STARTVM,
61 USAGE_CONTROLVM,
62 USAGE_DISCARDSTATE,
63 USAGE_CLOSEMEDIUM,
64 USAGE_SHOWMEDIUMINFO,
65 USAGE_CREATEMEDIUM,
66 USAGE_MODIFYMEDIUM,
67 USAGE_CLONEMEDIUM,
68 USAGE_MOVEVM,
69 USAGE_CREATEHOSTIF,
70 USAGE_REMOVEHOSTIF,
71 USAGE_GETEXTRADATA,
72 USAGE_SETEXTRADATA,
73 USAGE_SETPROPERTY,
74 USAGE_USBFILTER,
75 USAGE_SHAREDFOLDER,
76 USAGE_I_LOADSYMS,
77 USAGE_I_LOADMAP,
78 USAGE_I_SETHDUUID,
79 USAGE_CONVERTFROMRAW,
80 USAGE_I_LISTPARTITIONS,
81 USAGE_I_CREATERAWVMDK,
82 USAGE_ADOPTSTATE,
83 USAGE_I_MODINSTALL,
84 USAGE_I_MODUNINSTALL,
85 USAGE_I_RENAMEVMDK,
86#ifdef VBOX_WITH_GUEST_PROPS
87 USAGE_GUESTPROPERTY,
88#endif /* VBOX_WITH_GUEST_PROPS defined */
89 USAGE_I_CONVERTTORAW,
90 USAGE_METRICS,
91 USAGE_I_CONVERTHD,
92 USAGE_IMPORTAPPLIANCE,
93 USAGE_EXPORTAPPLIANCE,
94 USAGE_HOSTONLYIFS,
95 USAGE_I_DUMPHDINFO,
96 USAGE_STORAGEATTACH,
97 USAGE_STORAGECONTROLLER,
98#ifdef VBOX_WITH_GUEST_CONTROL
99 USAGE_GUESTCONTROL,
100#endif /* VBOX_WITH_GUEST_CONTROL defined */
101 USAGE_I_DEBUGLOG,
102 USAGE_I_SETHDPARENTUUID,
103 USAGE_I_PASSWORDHASH,
104 USAGE_BANDWIDTHCONTROL,
105 USAGE_I_GUESTSTATS,
106 USAGE_I_REPAIRHD,
107 USAGE_NATNETWORK,
108 USAGE_MEDIUMPROPERTY,
109 USAGE_ENCRYPTMEDIUM,
110 USAGE_MEDIUMENCCHKPWD,
111 USAGE_USBDEVSOURCE,
112 USAGE_CLOUDPROFILE,
113 /* Insert new entries before this line, but only if it is not an option
114 * to go for the new style command and help handling (see e.g. extpack,
115 * unattend or mediumio. */
116 USAGE_S_NEWCMD = 10000, /**< new style command with no old help support */
117 USAGE_S_ALL,
118 USAGE_S_DUMPOPTS
119} USAGECATEGORY;
120/** @} */
121
122
123#define HELP_SCOPE_USBFILTER_ADD RT_BIT_64(0)
124#define HELP_SCOPE_USBFILTER_MODIFY RT_BIT_64(1)
125#define HELP_SCOPE_USBFILTER_REMOVE RT_BIT_64(2)
126
127#define HELP_SCOPE_SHAREDFOLDER_ADD RT_BIT_64(0)
128#define HELP_SCOPE_SHAREDFOLDER_REMOVE RT_BIT_64(1)
129
130#ifdef VBOX_WITH_GUEST_CONTROL
131# define HELP_SCOPE_GSTCTRL_RUN RT_BIT(0)
132# define HELP_SCOPE_GSTCTRL_START RT_BIT(1)
133# define HELP_SCOPE_GSTCTRL_COPYFROM RT_BIT(2)
134# define HELP_SCOPE_GSTCTRL_COPYTO RT_BIT(3)
135# define HELP_SCOPE_GSTCTRL_MKDIR RT_BIT(4)
136# define HELP_SCOPE_GSTCTRL_RMDIR RT_BIT(5)
137# define HELP_SCOPE_GSTCTRL_RM RT_BIT(6)
138# define HELP_SCOPE_GSTCTRL_MV RT_BIT(7)
139# define HELP_SCOPE_GSTCTRL_MKTEMP RT_BIT(8)
140# define HELP_SCOPE_GSTCTRL_LIST RT_BIT(9)
141# define HELP_SCOPE_GSTCTRL_CLOSEPROCESS RT_BIT(10)
142# define HELP_SCOPE_GSTCTRL_CLOSESESSION RT_BIT(11)
143# define HELP_SCOPE_GSTCTRL_STAT RT_BIT(12)
144# define HELP_SCOPE_GSTCTRL_UPDATEGA RT_BIT(13)
145# define HELP_SCOPE_GSTCTRL_WATCH RT_BIT(14)
146#endif
147
148/** command handler argument */
149struct HandlerArg
150{
151 int argc;
152 char **argv;
153
154#ifndef VBOX_ONLY_DOCS
155 ComPtr<IVirtualBox> virtualBox;
156 ComPtr<ISession> session;
157#endif
158};
159
160/** flag whether we're in internal mode */
161extern bool g_fInternalMode;
162
163/** showVMInfo details */
164typedef enum
165{
166 VMINFO_NONE = 0,
167 VMINFO_STANDARD = 1, /**< standard details */
168 VMINFO_FULL = 2, /**< both */
169 VMINFO_MACHINEREADABLE = 3, /**< both, and make it machine readable */
170 VMINFO_COMPACT = 4
171} VMINFO_DETAILS;
172
173
174////////////////////////////////////////////////////////////////////////////////
175//
176// global variables
177//
178////////////////////////////////////////////////////////////////////////////////
179
180extern bool g_fDetailedProgress; // in VBoxManage.cpp
181
182
183////////////////////////////////////////////////////////////////////////////////
184//
185// prototypes
186//
187////////////////////////////////////////////////////////////////////////////////
188
189/* VBoxManageHelp.cpp */
190
191/* Legacy help infrastructure, to be replaced by new one using generated help. */
192void printUsage(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, PRTSTREAM pStrm);
193RTEXITCODE errorSyntax(USAGECATEGORY enmCommand, const char *pszFormat, ...);
194RTEXITCODE errorSyntaxEx(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, const char *pszFormat, ...);
195RTEXITCODE errorGetOpt(USAGECATEGORY enmCommand, int rc, union RTGETOPTUNION const *pValueUnion);
196RTEXITCODE errorGetOptEx(USAGECATEGORY enmCommand, uint64_t fSubcommandScope, int rc, union RTGETOPTUNION const *pValueUnion);
197RTEXITCODE errorArgument(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2);
198
199void printUsageInternal(USAGECATEGORY enmCommand, PRTSTREAM pStrm);
200
201#ifndef VBOX_ONLY_DOCS
202void setCurrentCommand(enum HELP_CMD_VBOXMANAGE enmCommand);
203void setCurrentSubcommand(uint64_t fCurSubcommandScope);
204
205void printUsage(PRTSTREAM pStrm);
206void printHelp(PRTSTREAM pStrm);
207RTEXITCODE errorNoSubcommand(void);
208RTEXITCODE errorUnknownSubcommand(const char *pszSubCmd);
209RTEXITCODE errorTooManyParameters(char **papszArgs);
210RTEXITCODE errorGetOpt(int rcGetOpt, union RTGETOPTUNION const *pValueUnion);
211RTEXITCODE errorFetchValue(int iValueNo, const char *pszOption, int rcGetOptFetchValue, union RTGETOPTUNION const *pValueUnion);
212RTEXITCODE errorSyntax(const char *pszFormat, ...);
213
214HRESULT showProgress(ComPtr<IProgress> progress);
215#endif
216
217/* VBoxManage.cpp */
218void showLogo(PRTSTREAM pStrm);
219
220#ifndef VBOX_ONLY_DOCS
221RTEXITCODE handleInternalCommands(HandlerArg *a);
222#endif /* !VBOX_ONLY_DOCS */
223
224/* VBoxManageControlVM.cpp */
225RTEXITCODE handleControlVM(HandlerArg *a);
226#ifndef VBOX_ONLY_DOCS
227unsigned int getMaxNics(IVirtualBox* vbox, IMachine* mach);
228#endif
229
230/* VBoxManageModifyVM.cpp */
231#ifndef VBOX_ONLY_DOCS
232void parseGroups(const char *pcszGroups, com::SafeArray<BSTR> *pGroups);
233#endif
234RTEXITCODE handleModifyVM(HandlerArg *a);
235
236/* VBoxManageDebugVM.cpp */
237RTEXITCODE handleDebugVM(HandlerArg *a);
238
239/* VBoxManageGuestProp.cpp */
240extern void usageGuestProperty(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2);
241
242/* VBoxManageGuestCtrl.cpp */
243extern void usageGuestControl(PRTSTREAM pStrm, const char *pcszSep1, const char *pcszSep2, uint64_t fSubcommandScope);
244
245#ifndef VBOX_ONLY_DOCS
246/* VBoxManageGuestProp.cpp */
247RTEXITCODE handleGuestProperty(HandlerArg *a);
248
249/* VBoxManageGuestCtrl.cpp */
250RTEXITCODE handleGuestControl(HandlerArg *a);
251
252/* VBoxManageVMInfo.cpp */
253HRESULT showSnapshots(ComPtr<ISnapshot> &rootSnapshot,
254 ComPtr<ISnapshot> &currentSnapshot,
255 VMINFO_DETAILS details,
256 const com::Utf8Str &prefix = "",
257 int level = 0);
258RTEXITCODE handleShowVMInfo(HandlerArg *a);
259HRESULT showVMInfo(ComPtr<IVirtualBox> pVirtualBox,
260 ComPtr<IMachine> pMachine,
261 ComPtr<ISession> pSession,
262 VMINFO_DETAILS details = VMINFO_NONE);
263const char *machineStateToName(MachineState_T machineState, bool fShort);
264HRESULT showBandwidthGroups(ComPtr<IBandwidthControl> &bwCtrl,
265 VMINFO_DETAILS details);
266
267/* VBoxManageList.cpp */
268RTEXITCODE handleList(HandlerArg *a);
269
270/* VBoxManageMetrics.cpp */
271RTEXITCODE handleMetrics(HandlerArg *a);
272
273/* VBoxManageMisc.cpp */
274RTEXITCODE handleRegisterVM(HandlerArg *a);
275RTEXITCODE handleUnregisterVM(HandlerArg *a);
276RTEXITCODE handleCreateVM(HandlerArg *a);
277RTEXITCODE handleCloneVM(HandlerArg *a);
278RTEXITCODE handleStartVM(HandlerArg *a);
279RTEXITCODE handleDiscardState(HandlerArg *a);
280RTEXITCODE handleAdoptState(HandlerArg *a);
281RTEXITCODE handleGetExtraData(HandlerArg *a);
282RTEXITCODE handleSetExtraData(HandlerArg *a);
283RTEXITCODE handleSetProperty(HandlerArg *a);
284RTEXITCODE handleSharedFolder(HandlerArg *a);
285RTEXITCODE handleExtPack(HandlerArg *a);
286RTEXITCODE handleUnattended(HandlerArg *a);
287RTEXITCODE handleMoveVM(HandlerArg *a);
288RTEXITCODE handleCloudProfile(HandlerArg *a);
289
290/* VBoxManageDisk.cpp */
291HRESULT openMedium(HandlerArg *a, const char *pszFilenameOrUuid,
292 DeviceType_T enmDevType, AccessMode_T enmAccessMode,
293 ComPtr<IMedium> &pMedium, bool fForceNewUuidOnOpen,
294 bool fSilent);
295RTEXITCODE handleCreateMedium(HandlerArg *a);
296RTEXITCODE handleModifyMedium(HandlerArg *a);
297RTEXITCODE handleCloneMedium(HandlerArg *a);
298RTEXITCODE handleMediumProperty(HandlerArg *a);
299RTEXITCODE handleEncryptMedium(HandlerArg *a);
300RTEXITCODE handleCheckMediumPassword(HandlerArg *a);
301RTEXITCODE handleConvertFromRaw(HandlerArg *a);
302HRESULT showMediumInfo(const ComPtr<IVirtualBox> &pVirtualBox,
303 const ComPtr<IMedium> &pMedium,
304 const char *pszParentUUID,
305 bool fOptLong);
306RTEXITCODE handleShowMediumInfo(HandlerArg *a);
307RTEXITCODE handleCloseMedium(HandlerArg *a);
308RTEXITCODE handleMediumIO(HandlerArg *a);
309int parseMediumType(const char *psz, MediumType_T *penmMediumType);
310int parseBool(const char *psz, bool *pb);
311
312/* VBoxManageStorageController.cpp */
313RTEXITCODE handleStorageAttach(HandlerArg *a);
314RTEXITCODE handleStorageController(HandlerArg *a);
315
316// VBoxManageImport.cpp
317RTEXITCODE handleImportAppliance(HandlerArg *a);
318RTEXITCODE handleExportAppliance(HandlerArg *a);
319
320// VBoxManageSnapshot.cpp
321RTEXITCODE handleSnapshot(HandlerArg *a);
322
323/* VBoxManageUSB.cpp */
324RTEXITCODE handleUSBFilter(HandlerArg *a);
325RTEXITCODE handleUSBDevSource(HandlerArg *a);
326
327/* VBoxManageHostonly.cpp */
328RTEXITCODE handleHostonlyIf(HandlerArg *a);
329
330/* VBoxManageDHCPServer.cpp */
331RTEXITCODE handleDHCPServer(HandlerArg *a);
332
333/* VBoxManageNATNetwork.cpp */
334RTEXITCODE handleNATNetwork(HandlerArg *a);
335
336
337/* VBoxManageBandwidthControl.cpp */
338RTEXITCODE handleBandwidthControl(HandlerArg *a);
339
340/* VBoxManageCloud.cpp */
341RTEXITCODE handleCloud(HandlerArg *a);
342
343#endif /* !VBOX_ONLY_DOCS */
344
345#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