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