Virtual machine Management Terminal User Interface
Révision | f270369f84409b7bd936b8dbcae7274c86af4bae (tree) |
---|---|
l'heure | 2023-01-29 20:30:54 |
Auteur | Koine Yuusuke(koinec) <koinec@user...> |
Commiter | Koine Yuusuke(koinec) |
Create guestconfig.[ch]
@@ -42,6 +42,7 @@ OBJS_PARTS = common.o \ | ||
42 | 42 | hvthread.o \ |
43 | 43 | hvcmd.o \ |
44 | 44 | guestctl.o \ |
45 | + guestconfig.o \ | |
45 | 46 | vmbhyve.o \ |
46 | 47 | sshcmd.o \ |
47 | 48 | localcmd.o \ |
@@ -72,6 +73,7 @@ HEADER = vmtui.h \ | ||
72 | 73 | hvthread.h \ |
73 | 74 | hvcmd.h \ |
74 | 75 | guestctl.h \ |
76 | + guestconfig.h \ | |
75 | 77 | vmbhyve.h \ |
76 | 78 | sshcmd.h \ |
77 | 79 | localcmd.h \ |
@@ -168,6 +170,9 @@ hvcmd.o: hvcmd.c $(HEADER) | ||
168 | 170 | guestctl.o: guestctl.c $(HEADER) |
169 | 171 | $(CC) -c -o guestctl.o $(FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
170 | 172 | guestctl.c |
173 | +guestconfig.o: guestconfig.c $(HEADER) | |
174 | + $(CC) -c -o guestconfig.o $(FLAGS_COMPILE) $(FLAGS_DEBUG) \ | |
175 | + guestconfig.c | |
171 | 176 | vmbhyve.o: vmbhyve.c $(HEADER) |
172 | 177 | $(CC) -c -o vmbhyve.o $(FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
173 | 178 | vmbhyve.c |
@@ -215,34 +220,34 @@ $(TEST_TARGET): $(TEST_OBJS) $(OBJS_PARTS) | ||
215 | 220 | $(CC) -o $(TEST_TARGET) $(TEST_FLAGS_LINKER) \ |
216 | 221 | $(TEST_OBJS) $(OBJS_PARTS) |
217 | 222 | |
218 | -test_vmtui.o: test_vmtui.c | |
223 | +test_vmtui.o: test_vmtui.c $(HEADER) | |
219 | 224 | $(CC) -c -o test_vmtui.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
220 | 225 | test_vmtui.c |
221 | -test_hvisor.o: test_hvisor.c | |
226 | +test_hvisor.o: test_hvisor.c $(HEADER) | |
222 | 227 | $(CC) -c -o test_hvisor.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
223 | 228 | test_hvisor.c |
224 | -test_guest.o: test_guest.c | |
229 | +test_guest.o: test_guest.c $(HEADER) | |
225 | 230 | $(CC) -c -o test_guest.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
226 | 231 | test_guest.c |
227 | -test_request.o: test_request.c | |
232 | +test_request.o: test_request.c $(HEADER) | |
228 | 233 | $(CC) -c -o test_request.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
229 | 234 | test_request.c |
230 | -test_hvctl.o: test_hvctl.c | |
235 | +test_hvctl.o: test_hvctl.c $(HEADER) | |
231 | 236 | $(CC) -c -o test_hvctl.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
232 | 237 | test_hvctl.c |
233 | -test_guestctl.o:test_guestctl.c | |
238 | +test_guestctl.o:test_guestctl.c $(HEADER) | |
234 | 239 | $(CC) -c -o test_guestctl.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
235 | 240 | test_guestctl.c |
236 | -test_errinfo.o: test_errinfo.c | |
241 | +test_errinfo.o: test_errinfo.c $(HEADER) | |
237 | 242 | $(CC) -c -o test_errinfo.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
238 | 243 | test_errinfo.c |
239 | -test_configfile.o: test_configfile.c | |
244 | +test_configfile.o: test_configfile.c $(HEADER) | |
240 | 245 | $(CC) -c -o test_configfile.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
241 | 246 | test_configfile.c |
242 | -test_keyval.o: test_keyval.c | |
247 | +test_keyval.o: test_keyval.c $(HEADER) | |
243 | 248 | $(CC) -c -o test_keyval.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
244 | 249 | test_keyval.c |
245 | -test_textbuf.o: test_textbuf.c | |
250 | +test_textbuf.o: test_textbuf.c $(HEADER) | |
246 | 251 | $(CC) -c -o test_textbuf.o $(TEST_FLAGS_COMPILE) $(FLAGS_DEBUG) \ |
247 | 252 | test_textbuf.c |
248 | 253 |
@@ -32,22 +32,156 @@ | ||
32 | 32 | |
33 | 33 | #define GUEST_MAXLEN_NAME 128 |
34 | 34 | |
35 | -#define GUEST_LOADER_KEY "Loader" | |
36 | -#define GUEST_LOADER_PRI 0x00000000 | |
37 | -#define GUEST_CPU_VCPUS_KEY "CPU/VCPUs" | |
38 | -#define GUEST_CPU_VCPUS_PRI 0x00000000 | |
39 | -#define GUEST_MEM_SIZE_KEY "Memory/Size" | |
40 | -#define GUEST_MEM_SIZE_PRI 0x00000000 | |
41 | -#define GUEST_VNC_HOST_KEY "VNC/Host" | |
42 | -#define GUEST_VNC_HOST_PRI 0x00000000 | |
43 | -#define GUEST_VNC_PORT_KEY "VNC/Port" | |
44 | -#define GUEST_VNC_PORT_PRI 0x00000000 | |
45 | -#define GUEST_AUTOSTART_KEY "AutoStart" | |
46 | -#define GUEST_AUTOSTART_PRI 0x00000000 | |
47 | -#define GUEST_DATASTORE_NAME_KEY "DataStore/Size" | |
48 | -#define GUEST_DATASTORE_NAME_PRI 0x00050010 | |
49 | -#define GUEST_DATASTORE_PATH_KEY "DataStore/Path" | |
50 | -#define GUEST_DATASTORE_PATH_PRI 0x00050020 | |
35 | +// Loader --- | |
36 | +#define GUEST_LOADER_BASEPRI 0x01000000 | |
37 | +#define GUEST_LOADER_BASEKEY "Loader" | |
38 | +#define GUEST_LOADER_LOADER_KEY GUEST_LOADER_BASEKEY"/Loader" // string | |
39 | +#define GUEST_LOADER_LOADER_PRI (GUEST_LOADER_BASEPRI|0x00000010) | |
40 | +#define GUEST_LOADER_BHYVELOADER_KEY GUEST_LOADER_BASEKEY"/BhyveLoader" // string | |
41 | +#define GUEST_LOADER_BHYVELOADER_PRI (GUEST_LOADER_BASEPRI|0x00000020) | |
42 | +#define GUEST_LOADER_TIMEOUT_KEY GUEST_LOADER_BASEKEY"/Timeout" // uint | |
43 | +#define GUEST_LOADER_TIMEOUT_PRI (GUEST_LOADER_BASEPRI|0x00000030) | |
44 | +// CPU --- | |
45 | +#define GUEST_CPU_BASEPRI 0x02000000 | |
46 | +#define GUEST_CPU_VCPUS_KEY "CPU/VCPUs" // (uint) | |
47 | +#define GUEST_CPU_VCPUS_PRI (GUEST_CPU_BASEPRI|0x00000010) | |
48 | +#define GUEST_CPU_SOCKETS_KEY "CPU/Sockets" // uint | |
49 | +#define GUEST_CPU_SOCKETS_PRI (GUEST_CPU_BASEPRI|0x00000020) | |
50 | +#define GUEST_CPU_CORES_KEY "CPU/Cores" // uint | |
51 | +#define GUEST_CPU_CORES_PRI (GUEST_CPU_BASEPRI|0x00000020) | |
52 | +#define GUEST_CPU_THREADS_KEY "CPU/Threads" // uint | |
53 | +#define GUEST_CPU_THREADS_PRI (GUEST_CPU_BASEPRI|0x00000030) | |
54 | +// Memory --- | |
55 | +#define GUEST_MEM_BASEPRI 0x03000000 | |
56 | +#define GUEST_MEM_SIZE_KEY "Memory/Size" // sfx. int | |
57 | +#define GUEST_MEM_SIZE_PRI (GUEST_MEM_BASEPRI|0x00000010) | |
58 | +#define GUEST_MEM_WIRED_KEY "Memory/Wired" // yes/no | |
59 | +#define GUEST_MEM_WIRED_PRI (GUEST_MEM_BASEPRI|0x00000020) | |
60 | +// Network --- | |
61 | +#define GUEST_NETWORK_BASEKEY "Network" | |
62 | +#define GUEST_NETWORK_BASEPRI 0x04000000 | |
63 | +#define GUEST_NETWORK_ITEMS_KEY "Network/Items" // uint | |
64 | +#define GUEST_NETWORK_ITEMS_PRI (GUEST_NETWORK_BASEPRI|0x00000010) | |
65 | +#define GUEST_NETWORK_TYPE_SUBKEY "Type" // string | |
66 | +#define GUEST_NETWORK_TYPE_PRI (GUEST_NETWORK_BASEPRI|0x00010010) | |
67 | +#define GUEST_NETWORK_SWITCH_SUBKEY "Switch" // string | |
68 | +#define GUEST_NETWORK_SWITCH_PRI (GUEST_NETWORK_BASEPRI|0x00010020) | |
69 | +#define GUEST_NETWORK_DEVICE_SUBKEY "Device" // string | |
70 | +#define GUEST_NETWORK_DEVICE_PRI (GUEST_NETWORK_BASEPRI|0x00010030) | |
71 | +#define GUEST_NETWORK_MAC_SUBKEY "MAC" // string | |
72 | +#define GUEST_NETWORK_MAC_PRI (GUEST_NETWORK_BASEPRI|0x00010040) | |
73 | +#define GUEST_NETWORK_SPAN_SUBKEY "Span" // string | |
74 | +#define GUEST_NETWORK_SPAN_PRI (GUEST_NETWORK_BASEPRI|0x00010050) | |
75 | +// Disk --- | |
76 | +#define GUEST_DISK_BASEKEY "Disk" | |
77 | +#define GUEST_DISK_BASEPRI 0x05000000 | |
78 | +#define GUEST_DISK_ITEMS_KEY "Disk/Items" // uint | |
79 | +#define GUEST_DISK_ITEMS_PRI (GUEST_DISK_BASEPRI|0x00000010) | |
80 | +#define GUEST_DISK_TYPE_SUBKEY "Type" // string | |
81 | +#define GUEST_DISK_TYPE_PRI (GUEST_DISK_BASEPRI|0x00010010) | |
82 | +#define GUEST_DISK_NAME_SUBKEY "Name" // string | |
83 | +#define GUEST_DISK_NAME_PRI (GUEST_DISK_BASEPRI|0x00010020) | |
84 | +#define GUEST_DISK_DEVICE_SUBKEY "Device" // string | |
85 | +#define GUEST_DISK_DEVICE_PRI (GUEST_DISK_BASEPRI|0x00010030) | |
86 | +#define GUEST_DISK_OPTION_SUBKEY "Option" // string | |
87 | +#define GUEST_DISK_OPTION_PRI (GUEST_DISK_BASEPRI|0x00010040) | |
88 | +#define GUEST_DISK_SIZE_SUBKEY "Size" // sfxint | |
89 | +#define GUEST_DISK_SIZE_PRI (GUEST_DISK_BASEPRI|0x00010050) | |
90 | +// Graphics (VNC) --- | |
91 | +#define GUEST_VNC_BASEPRI 0x06000000 | |
92 | +#define GUEST_VNC_ENABLE_KEY "VNC/Enable" // yes/no | |
93 | +#define GUEST_VNC_ENABLE_PRI (GUEST_VNC_BASEPRI|0x00000010) | |
94 | +#define GUEST_VNC_HOST_KEY "VNC/Host" // string | |
95 | +#define GUEST_VNC_HOST_PRI (GUEST_VNC_BASEPRI|0x00000020) | |
96 | +#define GUEST_VNC_PORT_KEY "VNC/Port" // uint | |
97 | +#define GUEST_VNC_PORT_PRI (GUEST_VNC_BASEPRI|0x00000030) | |
98 | +#define GUEST_VNC_RESOLUTION_KEY "VNC/Resolution" // string | |
99 | +#define GUEST_VNC_RESOLUTION_PRI (GUEST_VNC_BASEPRI|0x00000040) | |
100 | +#define GUEST_VNC_WAIT_KEY "VNC/Wait" // yes/no | |
101 | +#define GUEST_VNC_WAIT_PRI (GUEST_VNC_BASEPRI|0x00000050) | |
102 | +#define GUEST_VNC_VGA_KEY "VNC/Vga" // string | |
103 | +#define GUEST_VNC_VGA_PRI (GUEST_VNC_BASEPRI|0x00000060) | |
104 | +// Grub --- | |
105 | +#define GUEST_GRUB_BASEKEY "Grub" | |
106 | +#define GUEST_GRUB_BASEPRI 0x07000000 | |
107 | +#define GUEST_GRUB_RUNPARTITION_KEY "Grub/RunPartition" // string | |
108 | +#define GUEST_GRUB_RUNPARTITION_PRI (GUEST_GRUB_BASEPRI|0x00000010) | |
109 | +#define GUEST_GRUB_RUNDIR_KEY "Grub/RunDir" // string | |
110 | +#define GUEST_GRUB_RUNDIR_PRI (GUEST_GRUB_BASEPRI|0x00000020) | |
111 | +#define GUEST_GRUB_RUNFILE_KEY "Grub/RunFile" // string | |
112 | +#define GUEST_GRUB_RUNFILE_PRI (GUEST_GRUB_BASEPRI|0x00000030) | |
113 | +#define GUEST_GRUB_ITEMS_KEY "Grub/Items" // uint | |
114 | +#define GUEST_GRUB_ITEMS_PRI (GUEST_GRUB_BASEPRI|0x00000040) | |
115 | +#define GUEST_GRUB_INSTALL_SUBKEY "Install" // string | |
116 | +#define GUEST_GRUB_INSTALL_PRI (GUEST_GRUB_BASEPRI|0x00100010) | |
117 | +#define GUEST_GRUB_RUN_SUBKEY "Run" // string | |
118 | +#define GUEST_GRUB_RUN_PRI (GUEST_GRUB_BASEPRI|0x00100020) | |
119 | +// Others --- | |
120 | +#define GUEST_OTHERS_BASEPRI 0x09000000 | |
121 | +#define GUEST_HOSTBRIDGE_KEY "Others/HostBridge" // string | |
122 | +#define GUEST_HOSTBRIDGE_PRI (GUEST_OTHERS_BASEPRI|0x00000010) | |
123 | +#define GUEST_COMPORTS_KEY "Others/ComPorts" // string | |
124 | +#define GUEST_COMPORTS_PRI (GUEST_OTHERS_BASEPRI|0x00000020) | |
125 | +#define GUEST_UTCTIME_KEY "Others/UTCtime" // yes/no | |
126 | +#define GUEST_UTCTIME_PRI (GUEST_OTHERS_BASEPRI|0x00000030) | |
127 | +#define GUEST_DEBUG_KEY "Others/Debug" // yes/no | |
128 | +#define GUEST_DEBUG_PRI (GUEST_OTHERS_BASEPRI|0x00000040) | |
129 | +#define GUEST_UUID_KEY "Others/UUID" // string | |
130 | +#define GUEST_UUID_PRI (GUEST_OTHERS_BASEPRI|0x00000050) | |
131 | +#define GUEST_IGNORE_BADMSR_KEY "Others/IgnoreBadMSR" // string | |
132 | +#define GUEST_IGNORE_BADMSR_PRI (GUEST_OTHERS_BASEPRI|0x00000060) | |
133 | +#define GUEST_VIRT_RANDOM_KEY "Others/VirtRandom" // yes/no | |
134 | +#define GUEST_VIRT_RANDOM_PRI (GUEST_OTHERS_BASEPRI|0x00000070) | |
135 | +#define GUEST_XHCI_MOUSE_KEY "Others/XHCImouse" // yes/no | |
136 | +#define GUEST_XHCI_MOUSE_PRI (GUEST_OTHERS_BASEPRI|0x00000080) | |
137 | +#define GUEST_AHCI_DEVLIMIT_KEY "Others/AHCIDeviceLimt" // uint | |
138 | +#define GUEST_AHCI_DEVLIMIT_PRI (GUEST_OTHERS_BASEPRI|0x00000090) | |
139 | +#define GUEST_START_SLOT_KEY "Others/UEFIStartSlot" // uint | |
140 | +#define GUEST_START_SLOT_PRI (GUEST_OTHERS_BASEPRI|0x000000a0) | |
141 | +#define GUEST_INSTALL_SLOT_KEY "Others/UEFIInstallSlot" // uint | |
142 | +#define GUEST_INSTALL_SLOT_PRI (GUEST_OTHERS_BASEPRI|0x000000b0) | |
143 | + | |
144 | +#define GUEST_PASSTHRU_ITEMS_KEY "Others/PassThru/Items" // uint | |
145 | +#define GUEST_PASSTHRU_ITEMS_PRI (GUEST_OTHERS_BASEPRI|0x00100000) | |
146 | +#define GUEST_PASSTHRU_BASEKEY "Others/PassThru" // string | |
147 | +#define GUEST_PASSTHRU_SUBKEY "Value" // string | |
148 | +#define GUEST_PASSTHRU_PRI (GUEST_OTHERS_BASEPRI|0x00110000) | |
149 | + | |
150 | +#define GUEST_VIRTCONSOLE_ITEMS_KEY "Others/VirtConsole/Items" // uint | |
151 | +#define GUEST_VIRTCONSOLE_ITEMS_PRI (GUEST_OTHERS_BASEPRI|0x00200000) | |
152 | +#define GUEST_VIRTCONSOLE_BASEKEY "Others/VirtConsole" // string | |
153 | +#define GUEST_VIRTCONSOLE_SUBKEY "Value" // string | |
154 | +#define GUEST_VIRTCONSOLE_PRI (GUEST_OTHERS_BASEPRI|0x00210000) | |
155 | +// Bhyve --- | |
156 | +#define GUEST_BHYVE_OPTIONS_KEY "Bhyve/BhyveOption" // string | |
157 | +#define GUEST_BHYVE_OPTIONS_PRI 0x0a000010 | |
158 | +#define GUEST_BHYVE_PRESTART_KEY "Bhyve/PreStartScript" // strng | |
159 | +#define GUEST_BHYVE_PRESTART_PRI 0x0a000020 | |
160 | +#define GUEST_BHYVE_PRIORITY_KEY "Bhyve/Priority" // sint | |
161 | +#define GUEST_BHYVE_PRIORITY_PRI 0x0a000030 | |
162 | +#define GUEST_BHYVE_AUTOSTART_KEY "Bhyve/AutoStart" | |
163 | +#define GUEST_BHYVE_AUTOSTART_PRI 0x0a000040 | |
164 | +// DataStore --- | |
165 | +#define GUEST_DATASTORE_NAME_KEY "DataStore/Size" | |
166 | +#define GUEST_DATASTORE_NAME_PRI 0x0b000010 | |
167 | +#define GUEST_DATASTORE_PATH_KEY "DataStore/Path" | |
168 | +#define GUEST_DATASTORE_PATH_PRI 0x0b000020 | |
169 | +// ZFS --- | |
170 | +#define GUEST_ZFS_DATASETOPTS_KEY "ZFS/DatasetOpts" // string | |
171 | +#define GUEST_ZFS_DATASETOPTS_PRI 0x0c000010 | |
172 | +#define GUEST_ZFS_ZVOLOPTS_KEY "ZFS/ZVolOpts" // string | |
173 | +#define GUEST_ZFS_ZVOLOPTS_PRI 0x0c000020 | |
174 | +// Resource Limitter --- | |
175 | +#define GUEST_LIMIT_CPU_PER_KEY "Limitter/CPU/Percent" // percent | |
176 | +#define GUEST_LIMIT_CPU_PER_PRI 0x0e000100 | |
177 | +#define GUEST_LIMIT_DISK_READ_BPS_KEY "Limitter/Disk/Read/Bps" // uint | |
178 | +#define GUEST_LIMIT_DISK_READ_BPS_PRI 0x0e000211 | |
179 | +#define GUEST_LIMIT_DISK_READ_IOPS_KEY "Limitter/Disk/Read/IOPS" // uint | |
180 | +#define GUEST_LIMIT_DISK_READ_IOPS_PRI 0x0e000212 | |
181 | +#define GUEST_LIMIT_DISK_WRITE_BPS_KEY "Limitter/Disk/Write/Bps" // uint | |
182 | +#define GUEST_LIMIT_DISK_WRITE_BPS_PRI 0x0e000221 | |
183 | +#define GUEST_LIMIT_DISK_WRITE_IOPS_KEY "Limitter/Disk/Write/IOPS" // uint | |
184 | +#define GUEST_LIMIT_DISK_WRITE_IOPS_PRI 0x0e000222 | |
51 | 185 | |
52 | 186 | |
53 | 187 | typedef struct { |
@@ -99,6 +233,11 @@ typedef struct { | ||
99 | 233 | #define GUEST_STATUS_WAIT 0x00000002 |
100 | 234 | #define GUEST_STATUS_UNKNOWN 0xffffffff |
101 | 235 | |
236 | + DWord dw_option; | |
237 | + | |
238 | + #define GUEST_OPTION_NONE 0x00000000 | |
239 | + #define GUEST_OPTION_NEW 0x00000001 | |
240 | + | |
102 | 241 | |
103 | 242 | } Guest; |
104 | 243 |
@@ -151,6 +290,49 @@ void Guest_DeleteChain( Guest *p_guest ); | ||
151 | 290 | void Guest_Clear( Guest *p_guest, int i_id ); |
152 | 291 | #endif |
153 | 292 | |
293 | +#define GUEST_SELECT_ITEMS_LOADER_LOADER 4 | |
294 | +#define GUEST_SELECT_ITEMS_HOSTBRIDGE 3 | |
295 | +#define GUEST_SELECT_ITEMS_COMPORTS 4 | |
296 | +#define GUEST_SELECT_ITEMS_DISK_TYPE 4 | |
297 | +#define GUEST_SELECT_ITEMS_DISK_DEVICE 5 | |
298 | +#define GUEST_SELECT_ITEMS_NETWORK_TYPE 2 | |
299 | +#define GUEST_SELECT_ITEMS_GRAPHICS_RES 9 | |
300 | +#define GUEST_SELECT_ITEMS_GRAPHICS_WAIT 3 | |
301 | +#define GUEST_SELECT_ITEMS_GRAPHICS_VGA 3 | |
302 | + | |
303 | +#ifdef VMTUI_SRC_GUEST | |
304 | +char *gpstr_guest_select_loader_loader[] | |
305 | + = { "bhyveload", "grub", "uefi", "uefi-csm" }; | |
306 | +char *gpstr_guest_select_hostbridge[] | |
307 | + = { "standard", "amd", "none" }; | |
308 | +char *gpstr_guest_select_comports[] | |
309 | + = { "com1", "com2", "com1 com2", "com2 com1" }; | |
310 | +char *gpstr_guest_select_disk_type[] | |
311 | + = { "virtio-blk", "ahci-hd", "ahci-cd", "nvme" }; | |
312 | +char *gpstr_guest_select_disk_device[] | |
313 | + = { "file", "zvol", "sparse-zvol", "custom", "iscsi" }; | |
314 | +char *gpstr_guest_select_network_type[] | |
315 | + = { "virtio-net", "e1000" }; | |
316 | +char *gpstr_guest_select_graphics_res[] | |
317 | + = { "1920x1200", "1920x1080", "1600x1200", "1600x900", "1280x1024", | |
318 | + "1280x720", "1024x768" ,"800x600", "640x480" }; | |
319 | +char *gpstr_guest_select_graphics_wait[] | |
320 | + = { "no", "yes", "auto" }; | |
321 | +char *gpstr_guest_select_graphics_vga[] | |
322 | + = { "on", "off", "io" }; | |
323 | + | |
324 | +#else | |
325 | +extern char *gpstr_guest_select_loader_loader[]; | |
326 | +extern char *gpstr_guest_select_hostbridge[]; | |
327 | +extern char *gpstr_guest_select_comports[]; | |
328 | +extern char *gpstr_guest_select_disk_type[]; | |
329 | +extern char *gpstr_guest_select_disk_device[]; | |
330 | +extern char *gpstr_guest_select_network_type[]; | |
331 | +extern char *gpstr_guest_select_graphics_res[]; | |
332 | +extern char *gpstr_guest_select_graphics_wait[]; | |
333 | +extern char *gpstr_guest_select_graphics_vga[]; | |
334 | +#endif | |
335 | + | |
154 | 336 | #endif |
155 | 337 | |
156 | 338 | /* EOF of @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ |
@@ -0,0 +1,122 @@ | ||
1 | +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
2 | + VMTUI (Virtual machine Management Terminal User Interface) | |
3 | + | |
4 | + Copyright(C) 2022- Koine Yuusuke(koinec). All Rights reserved. | |
5 | + | |
6 | + Redistribution and use in source and binary forms, with or without | |
7 | + modification, are permitted provided that the following conditions are met: | |
8 | + | |
9 | + 1. Redistributions of source code must retain the above copyright notice, | |
10 | + this list of conditions and the following disclaimer. | |
11 | + 2. Redistributions in binary form must reproduce the above copyright | |
12 | + notice, this list of conditions and the following disclaimer in the | |
13 | + documentation and/or other materials provided with the distribution. | |
14 | + | |
15 | + THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY EXPRESS | |
16 | + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
17 | + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
18 | + IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE LIABLE FOR ANY | |
19 | + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
20 | + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
21 | + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
22 | + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
23 | + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
24 | + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
25 | + | |
26 | +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ | |
27 | + | |
28 | + | |
29 | +#define VMTUI_SRC_GUESTCONFIG | |
30 | +#include "vmtui.h" | |
31 | + | |
32 | +/* ===========================================================================*/ | |
33 | +int | |
34 | + GuestConfig_ParseConfig( | |
35 | + int i_guest, | |
36 | + char *pstr_buf, | |
37 | + int i_buflen ) | |
38 | +{ | |
39 | + int i_len; | |
40 | + char *pstr_next; | |
41 | + char *pstr_line; | |
42 | + char *pstr_key; | |
43 | + char *pstr_value; | |
44 | + char *pstr_end; | |
45 | + Guest *p_guest; | |
46 | + | |
47 | + pstr_next = pstr_buf; | |
48 | + | |
49 | + while( NULL != (pstr_line = strsep( &pstr_next, "\n\r" ))) { | |
50 | + if( '\0' == *pstr_line ) { continue; } | |
51 | + | |
52 | + pstr_value = pstr_line; | |
53 | + | |
54 | + pstr_key = strsep( &pstr_value, "=" ); | |
55 | + if( NULL == pstr_key ) { continue; } | |
56 | + | |
57 | + // Cut value Double-Quote -- | |
58 | + if( NULL != pstr_value ) { | |
59 | + if( '"' == *(pstr_value + 0) ) { pstr_value++; } | |
60 | + | |
61 | + if( NULL == pstr_next) { pstr_end = (pstr_buf + i_buflen - 1); } | |
62 | + else { pstr_end = pstr_next - 2; } | |
63 | + | |
64 | + if(( pstr_value < pstr_end ) && ( '"' == *pstr_end )) | |
65 | + { *pstr_end = '\0'; } | |
66 | + } | |
67 | + | |
68 | + ErrInfo_DebugMsg( pstr_value ); | |
69 | + | |
70 | + } | |
71 | + | |
72 | + return 0x00; | |
73 | +} | |
74 | + | |
75 | +/* ===========================================================================*/ | |
76 | +VMTUI_GUESTCONFIG_EXTERN | |
77 | +int | |
78 | + GuestConfig_ReadConfig( | |
79 | + int i_guest, | |
80 | + HvConnect *p_hvcon ) | |
81 | +{ | |
82 | + int i_err; | |
83 | + char str_cmdline[128]; | |
84 | + //char str_datastore[KEYVAL_MAXLEN_STRVAL]; | |
85 | + Guest *p_guest; | |
86 | + KeyVal_Data t_val; | |
87 | + | |
88 | + // Read Config File --- | |
89 | + p_guest = Guest_Ref( i_guest ); | |
90 | + assert( NULL != p_guest ); | |
91 | + | |
92 | + KeyVal_GetData( &t_val, &(p_guest->t_info), GUEST_DATASTORE_PATH_KEY ); | |
93 | + snprintf( str_cmdline, sizeof( str_cmdline ), | |
94 | + "%s /bin/cat %s/%s/%s.conf", | |
95 | + p_hvcon->sudo.str_cmdline, | |
96 | + KEYVAL_DATA_STRING( t_val ), p_guest->str_vmname, p_guest->str_vmname ); | |
97 | + | |
98 | + Guest_Release( p_guest ); | |
99 | + | |
100 | +ErrInfo_DebugMsg( str_cmdline ); | |
101 | + | |
102 | + // Exec. Cmd --- | |
103 | + i_err = p_hvcon->ExecCmd( p_hvcon, str_cmdline ); | |
104 | + | |
105 | + // Analyze Cmd Result --- | |
106 | + if( 0x00 != p_hvcon->i_exit ) { | |
107 | + ErrInfo_Error( "Failed exec. get HyperVisor Info. command.", | |
108 | + p_hvcon->i_id, GUEST_ID_NONE, REQUEST_ID_NONE, i_err, | |
109 | + 0x00, 0x00, str_cmdline ); | |
110 | + return -0x01; | |
111 | + } | |
112 | + | |
113 | + // Parse Config File --- | |
114 | +//ErrInfo_DebugMsg( p_hvcon->str_buffer ); | |
115 | + GuestConfig_ParseConfig( i_guest, p_hvcon->str_buffer, p_hvcon->i_len ); | |
116 | + | |
117 | + return 0x00; | |
118 | +} | |
119 | + | |
120 | + | |
121 | +/* EOF of @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ | |
122 | + |
@@ -0,0 +1,272 @@ | ||
1 | +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
2 | + VMTUI (Virtual machine Management Terminal User Interface) | |
3 | + | |
4 | + Copyright(C) 2022- Koine Yuusuke(koinec). All Rights reserved. | |
5 | + | |
6 | + Redistribution and use in source and binary forms, with or without | |
7 | + modification, are permitted provided that the following conditions are met: | |
8 | + | |
9 | + 1. Redistributions of source code must retain the above copyright notice, | |
10 | + this list of conditions and the following disclaimer. | |
11 | + 2. Redistributions in binary form must reproduce the above copyright | |
12 | + notice, this list of conditions and the following disclaimer in the | |
13 | + documentation and/or other materials provided with the distribution. | |
14 | + | |
15 | + THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY EXPRESS | |
16 | + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
17 | + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
18 | + IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE LIABLE FOR ANY | |
19 | + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
20 | + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
21 | + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
22 | + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
23 | + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
24 | + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
25 | + | |
26 | +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ | |
27 | + | |
28 | +#ifndef VMTUI_HEADER_GUESTCONFIG | |
29 | +#define VMTUI_HEADER_GUESTCONFIG | |
30 | + | |
31 | +#include "vmtui.h" | |
32 | + | |
33 | +typedef struct { | |
34 | + char *pstr_cfg_base_key; | |
35 | + char *pstr_cfg_sub_key; | |
36 | + Byte b_type; | |
37 | + | |
38 | + #define GUESTCONFIG_TYPE_NONE 0x00 | |
39 | + #define GUESTCONFIG_TYPE_STRING 0x01 | |
40 | + #define GUESTCONFIG_TYPE_UINT 0x02 | |
41 | + #define GUESTCONFIG_TYPE_SINT 0x03 | |
42 | + #define GUESTCONFIG_TYPE_YESNO 0x04 | |
43 | + #define GUESTCONFIG_TYPE_SFXINT 0x05 | |
44 | + #define GUESTCONFIG_TYPE_PERCENT 0x06 | |
45 | + #define GUESTCONFIG_TYPE_SUBKEY 0x10 | |
46 | + | |
47 | + Byte b_counterid; | |
48 | + | |
49 | + #define GUESTCONFIG_CNTID_DISK 0x00 | |
50 | + #define GUESTCONFIG_CNTID_NETWORK 0x01 | |
51 | + #define GUESTCONFIG_CNTID_GRUB 0x02 | |
52 | + #define GUESTCONFIG_CNTID_PASSTHRU 0x03 | |
53 | + #define GUESTCONFIG_CNTID_VIRTCONSOLE 0x04 | |
54 | + #define GUESTCONFIG_CNTID_NONE 0xff | |
55 | + | |
56 | + char *pstr_keyval_base_key; | |
57 | + char *pstr_keyval_sub_key; | |
58 | + DWord dw_keyval_priority; | |
59 | + | |
60 | + int i_selects; | |
61 | + char **ppstr_select; | |
62 | +} GuestConfig_KeyTbl; | |
63 | + | |
64 | +#ifdef VMTUI_SRC_GUESTCONFIG | |
65 | + #define VMTUI_GUESTCONFIG_EXTERN | |
66 | +#else | |
67 | + #define VMTUI_GUESTCONFIG_EXTERN extern | |
68 | +#endif | |
69 | +VMTUI_GUESTCONFIG_EXTERN int GuestConfig_ReadConfig( int i_guest, HvConnect *p_hvcon ); | |
70 | + | |
71 | +#ifdef VMTUI_SRC_GUESTCONFIG | |
72 | +static GuestConfig_KeyTbl lt_cfgtbl[] = { | |
73 | + // Loader --- | |
74 | + { "loader", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
75 | + GUEST_LOADER_LOADER_KEY, NULL, GUEST_LOADER_LOADER_PRI, | |
76 | + 4, gpstr_guest_select_loader_loader }, | |
77 | + { "bhyveload_loader", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
78 | + GUEST_LOADER_BHYVELOADER_KEY, NULL, GUEST_LOADER_BHYVELOADER_PRI, | |
79 | + 0, NULL }, | |
80 | + { "loader_timeout", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
81 | + GUEST_LOADER_TIMEOUT_KEY, NULL, GUEST_LOADER_TIMEOUT_PRI, | |
82 | + 0, NULL }, | |
83 | + | |
84 | + // CPU --- | |
85 | + { "cpu_sockets", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
86 | + GUEST_CPU_SOCKETS_KEY, NULL, GUEST_CPU_SOCKETS_PRI, | |
87 | + 0, NULL }, | |
88 | + { "cpu_cores", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
89 | + GUEST_CPU_CORES_KEY, NULL, GUEST_CPU_CORES_PRI, | |
90 | + 0, NULL }, | |
91 | + { "cpu_threads", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
92 | + GUEST_CPU_THREADS_KEY, NULL, GUEST_CPU_THREADS_PRI, | |
93 | + 0, NULL }, | |
94 | + | |
95 | + // Memory --- | |
96 | + { "memory", NULL, GUESTCONFIG_TYPE_SFXINT, GUESTCONFIG_CNTID_NONE, | |
97 | + GUEST_MEM_SIZE_KEY, NULL, GUEST_MEM_SIZE_PRI, | |
98 | + 0, NULL }, | |
99 | + { "wired_memory", NULL, GUESTCONFIG_TYPE_YESNO, GUESTCONFIG_CNTID_NONE, | |
100 | + GUEST_MEM_WIRED_KEY, NULL, GUEST_MEM_WIRED_PRI, | |
101 | + 0, NULL }, | |
102 | + | |
103 | + // Network --- | |
104 | + { "network", "_type", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
105 | + GUESTCONFIG_CNTID_NETWORK, GUEST_NETWORK_BASEKEY, | |
106 | + GUEST_NETWORK_TYPE_SUBKEY, GUEST_NETWORK_TYPE_PRI, | |
107 | + GUEST_SELECT_ITEMS_NETWORK_TYPE, gpstr_guest_select_network_type }, | |
108 | + { "network", "_switch", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
109 | + GUESTCONFIG_CNTID_NETWORK, GUEST_NETWORK_BASEKEY, | |
110 | + GUEST_NETWORK_SWITCH_SUBKEY, GUEST_NETWORK_SWITCH_PRI, | |
111 | + 0, NULL }, | |
112 | + { "network", "_device", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
113 | + GUESTCONFIG_CNTID_NETWORK, GUEST_NETWORK_BASEKEY, | |
114 | + GUEST_NETWORK_DEVICE_SUBKEY, GUEST_NETWORK_DEVICE_PRI, | |
115 | + 0, NULL }, | |
116 | + { "network", "_mac", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
117 | + GUESTCONFIG_CNTID_NETWORK, GUEST_NETWORK_BASEKEY, | |
118 | + GUEST_NETWORK_MAC_SUBKEY, GUEST_NETWORK_MAC_PRI, | |
119 | + 0, NULL }, | |
120 | + { "network", "_span", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
121 | + GUESTCONFIG_CNTID_NETWORK, GUEST_NETWORK_BASEKEY, | |
122 | + GUEST_NETWORK_SPAN_SUBKEY, GUEST_NETWORK_SPAN_PRI, | |
123 | + 0, NULL }, | |
124 | + | |
125 | + // Disk --- | |
126 | + { "disk", "_type", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
127 | + GUESTCONFIG_CNTID_DISK, GUEST_DISK_BASEKEY, | |
128 | + GUEST_DISK_TYPE_SUBKEY, GUEST_DISK_TYPE_PRI, | |
129 | + GUEST_SELECT_ITEMS_DISK_TYPE, gpstr_guest_select_disk_type }, | |
130 | + { "disk", "_name", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
131 | + GUESTCONFIG_CNTID_DISK, GUEST_DISK_BASEKEY, | |
132 | + GUEST_DISK_NAME_SUBKEY, GUEST_DISK_NAME_PRI, | |
133 | + 0, NULL }, | |
134 | + { "disk", "_dev", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
135 | + GUESTCONFIG_CNTID_DISK, GUEST_DISK_BASEKEY, | |
136 | + GUEST_DISK_DEVICE_SUBKEY, GUEST_DISK_DEVICE_PRI, | |
137 | + GUEST_SELECT_ITEMS_DISK_DEVICE, gpstr_guest_select_disk_device }, | |
138 | + { "disk", "_opts", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
139 | + GUESTCONFIG_CNTID_DISK, GUEST_DISK_BASEKEY, | |
140 | + GUEST_DISK_OPTION_SUBKEY, GUEST_DISK_OPTION_PRI, | |
141 | + 0, NULL }, | |
142 | + { "disk", "_size", GUESTCONFIG_TYPE_SFXINT|GUESTCONFIG_TYPE_SUBKEY, | |
143 | + GUESTCONFIG_CNTID_DISK, GUEST_DISK_BASEKEY, | |
144 | + GUEST_DISK_SIZE_SUBKEY, GUEST_DISK_SIZE_PRI, | |
145 | + 0, NULL }, | |
146 | + | |
147 | + // Graphics (VNC) --- | |
148 | + { "graphics", NULL, GUESTCONFIG_TYPE_YESNO, GUESTCONFIG_CNTID_NONE, | |
149 | + GUEST_VNC_ENABLE_KEY, NULL, GUEST_VNC_ENABLE_PRI, | |
150 | + 0, NULL }, | |
151 | + { "graphics_listen", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
152 | + GUEST_VNC_HOST_KEY, NULL, GUEST_VNC_HOST_PRI, | |
153 | + 0, NULL }, | |
154 | + { "graphics_port", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
155 | + GUEST_VNC_PORT_KEY, NULL, GUEST_VNC_PORT_PRI, | |
156 | + 0, NULL }, | |
157 | + { "graphics_res", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
158 | + GUEST_VNC_RESOLUTION_KEY, NULL, GUEST_VNC_RESOLUTION_PRI, | |
159 | + GUEST_SELECT_ITEMS_GRAPHICS_RES, gpstr_guest_select_graphics_res }, | |
160 | + { "graphics_wait", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
161 | + GUEST_VNC_WAIT_KEY, NULL, GUEST_VNC_WAIT_PRI, | |
162 | + GUEST_SELECT_ITEMS_GRAPHICS_WAIT, gpstr_guest_select_graphics_wait }, | |
163 | + { "graphics_vga", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
164 | + GUEST_VNC_VGA_KEY, NULL, GUEST_VNC_VGA_PRI, | |
165 | + GUEST_SELECT_ITEMS_GRAPHICS_VGA, gpstr_guest_select_graphics_vga }, | |
166 | + | |
167 | + // Grub --- | |
168 | + { "grub_install", "", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
169 | + GUESTCONFIG_CNTID_GRUB, GUEST_GRUB_BASEKEY, | |
170 | + GUEST_GRUB_INSTALL_SUBKEY, GUEST_GRUB_INSTALL_PRI, | |
171 | + 0, NULL }, | |
172 | + { "grub_run", "", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
173 | + GUESTCONFIG_CNTID_GRUB, GUEST_GRUB_BASEKEY, | |
174 | + GUEST_GRUB_RUN_SUBKEY, GUEST_GRUB_RUN_PRI, | |
175 | + 0, NULL }, | |
176 | + { "grub_run_partition", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
177 | + GUEST_GRUB_RUNPARTITION_KEY,NULL, GUEST_GRUB_RUNPARTITION_PRI, | |
178 | + 0, NULL }, | |
179 | + { "grub_run_dir", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
180 | + GUEST_GRUB_RUNDIR_KEY, NULL, GUEST_GRUB_RUNDIR_PRI, | |
181 | + 0, NULL }, | |
182 | + { "grub_run_file", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
183 | + GUEST_GRUB_RUNFILE_KEY, NULL, GUEST_GRUB_RUNFILE_PRI, | |
184 | + 0, NULL }, | |
185 | + | |
186 | + // Others --- | |
187 | + { "hostbridge", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
188 | + GUEST_HOSTBRIDGE_KEY, NULL, GUEST_HOSTBRIDGE_PRI, | |
189 | + GUEST_SELECT_ITEMS_HOSTBRIDGE, gpstr_guest_select_hostbridge }, | |
190 | + { "comports", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
191 | + GUEST_COMPORTS_KEY, NULL, GUEST_COMPORTS_PRI, | |
192 | + GUEST_SELECT_ITEMS_COMPORTS, gpstr_guest_select_comports }, | |
193 | + { "utctime", NULL, GUESTCONFIG_TYPE_YESNO, GUESTCONFIG_CNTID_NONE, | |
194 | + GUEST_UTCTIME_KEY, NULL, GUEST_UTCTIME_PRI, | |
195 | + 0, NULL }, | |
196 | + { "debug", NULL, GUESTCONFIG_TYPE_YESNO, GUESTCONFIG_CNTID_NONE, | |
197 | + GUEST_DEBUG_KEY, NULL, GUEST_DEBUG_PRI, | |
198 | + 0, NULL }, | |
199 | + { "uuid", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
200 | + GUEST_UUID_KEY, NULL, GUEST_UUID_PRI, | |
201 | + 0, NULL }, | |
202 | + { "ignore_bad_msr", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
203 | + GUEST_IGNORE_BADMSR_KEY, NULL, GUEST_IGNORE_BADMSR_PRI, | |
204 | + 0, NULL }, | |
205 | + { "virt_random", NULL, GUESTCONFIG_TYPE_YESNO, GUESTCONFIG_CNTID_NONE, | |
206 | + GUEST_VIRT_RANDOM_KEY, NULL, GUEST_VIRT_RANDOM_PRI, | |
207 | + 0, NULL }, | |
208 | + { "xhci_mouse", NULL, GUESTCONFIG_TYPE_YESNO, GUESTCONFIG_CNTID_NONE, | |
209 | + GUEST_XHCI_MOUSE_KEY, NULL, GUEST_XHCI_MOUSE_PRI, | |
210 | + 0, NULL }, | |
211 | + { "ahci_device_limit", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
212 | + GUEST_AHCI_DEVLIMIT_KEY, NULL, GUEST_AHCI_DEVLIMIT_PRI, | |
213 | + 0, NULL }, | |
214 | + { "start_slot", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
215 | + GUEST_START_SLOT_KEY, NULL, GUEST_START_SLOT_PRI, | |
216 | + 0, NULL }, | |
217 | + { "install_slot", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
218 | + GUEST_INSTALL_SLOT_KEY, NULL, GUEST_INSTALL_SLOT_PRI, | |
219 | + 0, NULL }, | |
220 | + | |
221 | + { "passthru", "", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
222 | + GUESTCONFIG_CNTID_PASSTHRU, GUEST_PASSTHRU_BASEKEY, | |
223 | + GUEST_PASSTHRU_SUBKEY, GUEST_PASSTHRU_PRI, | |
224 | + 0, NULL }, | |
225 | + { "virt_console", "", GUESTCONFIG_TYPE_STRING|GUESTCONFIG_TYPE_SUBKEY, | |
226 | + GUESTCONFIG_CNTID_VIRTCONSOLE, GUEST_VIRTCONSOLE_BASEKEY, | |
227 | + GUEST_VIRTCONSOLE_SUBKEY, GUEST_VIRTCONSOLE_PRI, | |
228 | + 0, NULL }, | |
229 | + | |
230 | + // Bhyve --- | |
231 | + { "bhyve_options", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
232 | + GUEST_BHYVE_OPTIONS_KEY, NULL, GUEST_BHYVE_OPTIONS_PRI, | |
233 | + 0, NULL }, | |
234 | + { "prestart", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
235 | + GUEST_BHYVE_PRESTART_KEY, NULL, GUEST_BHYVE_PRESTART_PRI, | |
236 | + 0, NULL }, | |
237 | + { "priority", NULL, GUESTCONFIG_TYPE_SINT, GUESTCONFIG_CNTID_NONE, | |
238 | + GUEST_BHYVE_PRIORITY_KEY, NULL, GUEST_BHYVE_PRIORITY_PRI, | |
239 | + 0, NULL }, | |
240 | + | |
241 | + // ZFS --- | |
242 | + { "zfs_dataset_opts", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
243 | + GUEST_ZFS_DATASETOPTS_KEY, NULL, GUEST_ZFS_DATASETOPTS_PRI, | |
244 | + 0, NULL }, | |
245 | + { "zfs_zvol_opts", NULL, GUESTCONFIG_TYPE_STRING, GUESTCONFIG_CNTID_NONE, | |
246 | + GUEST_ZFS_ZVOLOPTS_KEY, NULL, GUEST_ZFS_ZVOLOPTS_PRI, | |
247 | + 0, NULL }, | |
248 | + | |
249 | + // Resource Limitter --- | |
250 | + { "limit_pcpu", NULL, GUESTCONFIG_TYPE_PERCENT, GUESTCONFIG_CNTID_NONE, | |
251 | + GUEST_LIMIT_CPU_PER_KEY, NULL, GUEST_LIMIT_CPU_PER_PRI, | |
252 | + 0, NULL }, | |
253 | + { "limit_rbps", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
254 | + GUEST_LIMIT_DISK_READ_BPS_KEY, NULL, GUEST_LIMIT_DISK_READ_BPS_PRI, | |
255 | + 0, NULL }, | |
256 | + { "limit_wbps", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
257 | + GUEST_LIMIT_DISK_WRITE_BPS_KEY, NULL, GUEST_LIMIT_DISK_WRITE_BPS_PRI, | |
258 | + 0, NULL }, | |
259 | + { "limit_riops", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
260 | + GUEST_LIMIT_DISK_READ_IOPS_KEY, NULL, GUEST_LIMIT_DISK_READ_IOPS_PRI, | |
261 | + 0, NULL }, | |
262 | + { "limit_wiops", NULL, GUESTCONFIG_TYPE_UINT, GUESTCONFIG_CNTID_NONE, | |
263 | + GUEST_LIMIT_DISK_WRITE_IOPS_KEY,NULL, GUEST_LIMIT_DISK_WRITE_IOPS_PRI, | |
264 | + 0, NULL }, | |
265 | +}; | |
266 | + | |
267 | +#endif | |
268 | + | |
269 | +#endif | |
270 | + | |
271 | +/* EOF of @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ | |
272 | + |
@@ -161,8 +161,8 @@ goto_TuiGuest_GeneratePageText_skipVNC: | ||
161 | 161 | |
162 | 162 | // Loader -- |
163 | 163 | t_attr.i_attr = 0x00; |
164 | - strncpy( t_attr.str_key, GUEST_LOADER_KEY, sizeof( t_attr.str_key ) ); | |
165 | - KeyVal_GetData( &t_kval, &p_guest->t_info, GUEST_LOADER_KEY ); | |
164 | + strncpy( t_attr.str_key, GUEST_LOADER_LOADER_KEY, sizeof( t_attr.str_key ) ); | |
165 | + KeyVal_GetData( &t_kval, &p_guest->t_info, GUEST_LOADER_LOADER_KEY ); | |
166 | 166 | snprintf( str_temp, sizeof( str_temp ), " %-22s: %s", "Loader", KEYVAL_DATA_STRING( t_kval ) ); |
167 | 167 | TextBuf_AppendLine( <_guest.t_textbuf, str_temp, 0, (void *)&t_attr ); |
168 | 168 |
@@ -182,6 +182,8 @@ int | ||
182 | 182 | int i_gnow; |
183 | 183 | int i_gtype; |
184 | 184 | int i_vnc; |
185 | + int i_newflag = 0x00; | |
186 | + int i_gnext; | |
185 | 187 | char *pstr_line; |
186 | 188 | char *pstr_next; |
187 | 189 | char *pstr_now; |
@@ -191,6 +193,7 @@ int | ||
191 | 193 | char c_unit; |
192 | 194 | DWord dw_temp; |
193 | 195 | HvConnect *p_hvcon; |
196 | + HVisor *p_hvisor; | |
194 | 197 | Guest *p_gnow; |
195 | 198 | KeyVal_Data t_val; |
196 | 199 |
@@ -242,7 +245,8 @@ int | ||
242 | 245 | memset( &t_val, 0x00, sizeof( KeyVal_Data ) ); |
243 | 246 | KEYVAL_DATA_SET_STRING( t_val, pstr_item[2] ); |
244 | 247 | i_err = KeyVal_SetData( |
245 | - &(p_gnow->t_info), GUEST_LOADER_KEY, &t_val, GUEST_LOADER_PRI ); | |
248 | + &(p_gnow->t_info), GUEST_LOADER_LOADER_KEY, | |
249 | + &t_val, GUEST_LOADER_LOADER_PRI ); | |
246 | 250 | |
247 | 251 | // CPU cores --- |
248 | 252 | i_temp = (int)strtol( pstr_item[3], NULL, 10 ); |
@@ -321,18 +325,46 @@ int | ||
321 | 325 | { p_gnow->dw_status = GUEST_STATUS_UNKNOWN; } |
322 | 326 | } |
323 | 327 | |
328 | + if( GUEST_OBTAIN_NEW == i_gtype ) { | |
329 | + p_gnow->dw_option = GUEST_OPTION_NEW; | |
330 | + i_newflag++; | |
331 | + } | |
332 | + | |
324 | 333 | Guest_Release( p_gnow ); |
334 | + } | |
325 | 335 | |
326 | - if( GUEST_OBTAIN_NEW == i_gtype ) { | |
336 | + if( 0x00 == i_newflag ) { goto goto_VmBhyve_ExecReq_VMLIST_posst; } | |
337 | + | |
338 | + // Get New Guest Detail Information --- | |
339 | + p_hvisor = HVisor_Ref( p_hvcon->i_id ); | |
340 | + if( NULL == p_hvisor ) { | |
341 | + goto goto_VmBhyve_ExecReq_VMLIST_posst; | |
342 | + } | |
343 | + | |
344 | + i_gnow = p_hvisor->guest.i_top; | |
345 | + | |
346 | + HVisor_Release( p_hvisor ); | |
347 | + | |
348 | + while( REQUEST_ID_NONE != i_gnow ) { | |
349 | + p_gnow = Guest_Use( i_gnow ); | |
350 | + if( NULL == p_gnow) { continue; } | |
351 | + dw_temp = p_gnow->dw_option; | |
352 | + p_gnow->dw_option &= ~GUEST_OPTION_NEW; | |
353 | + i_gnext = p_gnow->hvisor.i_guest_next; | |
354 | + Guest_Release( p_gnow ); | |
355 | + | |
356 | + if( GUEST_OPTION_NEW & dw_temp ) { | |
327 | 357 | // Get Datastore Path from HVisor info --- |
328 | - GuestCtl_GetDataStorePath( i_gnow, p_hvcon->i_id, pstr_item[1] ); | |
358 | + GuestCtl_GetDataStorePath( i_gnow, p_hvcon->i_id, NULL ); | |
329 | 359 | |
330 | 360 | // Get Guest Config file info --- |
331 | - | |
361 | + GuestConfig_ReadConfig( i_gnow, p_hvcon ); | |
332 | 362 | } |
333 | 363 | |
364 | + i_gnow = i_gnext; | |
334 | 365 | } |
335 | 366 | |
367 | +goto_VmBhyve_ExecReq_VMLIST_posst: | |
336 | 368 | return 0x00; |
337 | 369 | } |
338 | 370 |
@@ -87,6 +87,7 @@ typedef unsigned long QWord; | ||
87 | 87 | #include "localcmd.h" |
88 | 88 | #include "localshell.h" |
89 | 89 | #include "guestctl.h" |
90 | +#include "guestconfig.h" | |
90 | 91 | #include "vmbhyve.h" |
91 | 92 | #include "hvcmd.h" |
92 | 93 | #include "configfile.h" |