xref: /openbsd-src/usr.sbin/vmctl/vmctl.h (revision 85846d3ec971e4e7276fabc0a3e83bff67cb3972)
1*85846d3eSmlarkin /*	$OpenBSD: vmctl.h,v 1.39 2024/07/09 15:51:11 mlarkin Exp $	*/
2eb8d1da1Sreyk 
3eb8d1da1Sreyk /*
4eb8d1da1Sreyk  * Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org>
5eb8d1da1Sreyk  *
6eb8d1da1Sreyk  * Permission to use, copy, modify, and distribute this software for any
7eb8d1da1Sreyk  * purpose with or without fee is hereby granted, provided that the above
8eb8d1da1Sreyk  * copyright notice and this permission notice appear in all copies.
9eb8d1da1Sreyk  *
10eb8d1da1Sreyk  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11eb8d1da1Sreyk  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12eb8d1da1Sreyk  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13eb8d1da1Sreyk  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14eb8d1da1Sreyk  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15eb8d1da1Sreyk  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16eb8d1da1Sreyk  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17eb8d1da1Sreyk  */
18eb8d1da1Sreyk 
19eb8d1da1Sreyk #ifndef VMCTL_PARSER_H
20eb8d1da1Sreyk #define VMCTL_PARSER_H
21eb8d1da1Sreyk 
22fe102934Sreyk #define VMCTL_CU	"/usr/bin/cu"
23fe102934Sreyk 
24eb8d1da1Sreyk enum actions {
25eb8d1da1Sreyk 	NONE,
2695009bb4Sreyk 	CMD_CONSOLE,
27eb8d1da1Sreyk 	CMD_CREATE,
28eb8d1da1Sreyk 	CMD_LOAD,
293afb90b0Sreyk 	CMD_LOG,
30008065a5Sreyk 	CMD_RELOAD,
311f7fe034Sreyk 	CMD_RESET,
32eb8d1da1Sreyk 	CMD_START,
33eb8d1da1Sreyk 	CMD_STATUS,
34eb8d1da1Sreyk 	CMD_STOP,
35e0b12962Sreyk 	CMD_STOPALL,
36583f6618Sclaudio 	CMD_WAITFOR,
3752e954a3Spd 	CMD_PAUSE,
3852e954a3Spd 	CMD_UNPAUSE,
39eed20f3bSpd 	CMD_SEND,
40eed20f3bSpd 	CMD_RECEIVE,
41eb8d1da1Sreyk };
42eb8d1da1Sreyk 
43eb8d1da1Sreyk struct ctl_command;
44eb8d1da1Sreyk 
45eb8d1da1Sreyk struct parse_result {
46eb8d1da1Sreyk 	enum actions		 action;
47eb8d1da1Sreyk 	uint32_t		 id;
48eb8d1da1Sreyk 	char			*name;
49eb8d1da1Sreyk 	char			*path;
5095ab188fSccardenas 	char			*isopath;
51e545c54cSdv 	size_t			 size;
52eb8d1da1Sreyk 	int			 nifs;
53b657d36cSreyk 	char			**nets;
54b657d36cSreyk 	int			 nnets;
55eb8d1da1Sreyk 	size_t			 ndisks;
56eb8d1da1Sreyk 	char			**disks;
57f224f92aSccardenas 	int			*disktypes;
583afb90b0Sreyk 	int			 verbose;
596429e633Sreyk 	char			*instance;
603be9785fSreyk 	unsigned int		 flags;
611f7fe034Sreyk 	unsigned int		 mode;
62917458a3Sclaudio 	unsigned int		 bootdevice;
63eb8d1da1Sreyk 	struct ctl_command	*ctl;
64eb8d1da1Sreyk };
65eb8d1da1Sreyk 
66eb8d1da1Sreyk struct ctl_command {
67eb8d1da1Sreyk 	const char		*name;
68eb8d1da1Sreyk 	enum actions		 action;
69eb8d1da1Sreyk 	int			(*main)(struct parse_result *, int, char *[]);
70eb8d1da1Sreyk 	const char		*usage;
71eb8d1da1Sreyk 	int			 has_pledge;
72eb8d1da1Sreyk };
73eb8d1da1Sreyk 
747bfb33a3Sderaadt extern struct imsgbuf	*ibuf;
75eb8d1da1Sreyk 
76eb8d1da1Sreyk /* main.c */
77eb8d1da1Sreyk int	 vmmaction(struct parse_result *);
78eb8d1da1Sreyk int	 parse_ifs(struct parse_result *, char *, int);
79b657d36cSreyk int	 parse_network(struct parse_result *, char *);
80ead1b146Sdv void	 parse_size(struct parse_result *, char *, const char *);
81e2ceadc1Sreyk int	 parse_disktype(const char *, const char **);
82f224f92aSccardenas int	 parse_disk(struct parse_result *, char *, int);
834100d478Sjasper int	 parse_vmid(struct parse_result *, char *, int);
846429e633Sreyk int	 parse_instance(struct parse_result *, char *);
85eb8d1da1Sreyk void	 parse_free(struct parse_result *);
86eb8d1da1Sreyk int	 parse(int, char *[]);
8795009bb4Sreyk __dead void
8895009bb4Sreyk 	 ctl_openconsole(const char *);
89eb8d1da1Sreyk 
90eb8d1da1Sreyk /* vmctl.c */
914d2a1fb2Sreyk int	 open_imagefile(int, const char *, int,
924d2a1fb2Sreyk 	    struct virtio_backing *, off_t *);
937ac3f975Syasuoka int	 create_imagefile(int, const char *, const char *, uint64_t, const char **);
94e545c54cSdv int	 vm_start(uint32_t, const char *, size_t, int, char **, int,
95917458a3Sclaudio 	    char **, int *, char *, char *, char *, unsigned int);
9676031b44Sreyk int	 vm_start_complete(struct imsg *, int *, int);
973be9785fSreyk void	 terminate_vm(uint32_t, const char *, unsigned int);
983be9785fSreyk int	 terminate_vm_complete(struct imsg *, int *, unsigned int);
99583f6618Sclaudio void	 waitfor_vm(uint32_t, const char *);
10052e954a3Spd void	 pause_vm(uint32_t, const char *);
10152e954a3Spd int	 pause_vm_complete(struct imsg *, int *);
10252e954a3Spd void	 unpause_vm(uint32_t, const char *);
10352e954a3Spd int	 unpause_vm_complete(struct imsg *, int *);
104eed20f3bSpd void	 send_vm(uint32_t, const char *);
105eed20f3bSpd void	 vm_receive(uint32_t, const char *);
10659fb7762Sreyk int	 check_info_id(const char *, uint32_t);
107e0b12962Sreyk void	 get_info_vm(uint32_t, const char *, enum actions, unsigned int);
108eb8d1da1Sreyk int	 add_info(struct imsg *, int *);
1093f77225dSjasper const char
1103f77225dSjasper 	*vm_state(unsigned int);
111*85846d3eSmlarkin int	 print_vm_info(struct vmop_info_result *, size_t);
112e0b12962Sreyk void	 terminate_all(struct vmop_info_result *, size_t, unsigned int);
11395009bb4Sreyk __dead void
11495009bb4Sreyk 	 vm_console(struct vmop_info_result *, size_t);
115eb8d1da1Sreyk 
116eb8d1da1Sreyk #endif /* VMCTL_PARSER_H */
117