root / qemu-config.c @ 94befa45
History | View | Annotate | Download (23.5 kB)
1 | 7282a033 | Gerd Hoffmann | #include "qemu-common.h" |
---|---|---|---|
2 | 2f792016 | Markus Armbruster | #include "qemu-error.h" |
3 | 7282a033 | Gerd Hoffmann | #include "qemu-option.h" |
4 | 7282a033 | Gerd Hoffmann | #include "qemu-config.h" |
5 | d0fef6fb | Gerd Hoffmann | #include "hw/qdev.h" |
6 | 2ac20613 | Luiz Capitulino | #include "error.h" |
7 | 7282a033 | Gerd Hoffmann | |
8 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_drive_opts = {
|
9 | 7282a033 | Gerd Hoffmann | .name = "drive",
|
10 | 72cf2d4f | Blue Swirl | .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head), |
11 | 7282a033 | Gerd Hoffmann | .desc = { |
12 | 7282a033 | Gerd Hoffmann | { |
13 | 7282a033 | Gerd Hoffmann | .name = "bus",
|
14 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
15 | 7282a033 | Gerd Hoffmann | .help = "bus number",
|
16 | 7282a033 | Gerd Hoffmann | },{ |
17 | 7282a033 | Gerd Hoffmann | .name = "unit",
|
18 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
19 | 7282a033 | Gerd Hoffmann | .help = "unit number (i.e. lun for scsi)",
|
20 | 7282a033 | Gerd Hoffmann | },{ |
21 | 7282a033 | Gerd Hoffmann | .name = "if",
|
22 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
23 | 7282a033 | Gerd Hoffmann | .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
|
24 | 7282a033 | Gerd Hoffmann | },{ |
25 | 7282a033 | Gerd Hoffmann | .name = "index",
|
26 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
27 | 69d7e218 | Luiz Capitulino | .help = "index number",
|
28 | 7282a033 | Gerd Hoffmann | },{ |
29 | 7282a033 | Gerd Hoffmann | .name = "cyls",
|
30 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
31 | 7282a033 | Gerd Hoffmann | .help = "number of cylinders (ide disk geometry)",
|
32 | 7282a033 | Gerd Hoffmann | },{ |
33 | 7282a033 | Gerd Hoffmann | .name = "heads",
|
34 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
35 | 7282a033 | Gerd Hoffmann | .help = "number of heads (ide disk geometry)",
|
36 | 7282a033 | Gerd Hoffmann | },{ |
37 | 7282a033 | Gerd Hoffmann | .name = "secs",
|
38 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
39 | 7282a033 | Gerd Hoffmann | .help = "number of sectors (ide disk geometry)",
|
40 | 7282a033 | Gerd Hoffmann | },{ |
41 | 7282a033 | Gerd Hoffmann | .name = "trans",
|
42 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
43 | 7282a033 | Gerd Hoffmann | .help = "chs translation (auto, lba. none)",
|
44 | 7282a033 | Gerd Hoffmann | },{ |
45 | 7282a033 | Gerd Hoffmann | .name = "media",
|
46 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
47 | 7282a033 | Gerd Hoffmann | .help = "media type (disk, cdrom)",
|
48 | 7282a033 | Gerd Hoffmann | },{ |
49 | 7282a033 | Gerd Hoffmann | .name = "snapshot",
|
50 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
51 | 69d7e218 | Luiz Capitulino | .help = "enable/disable snapshot mode",
|
52 | 7282a033 | Gerd Hoffmann | },{ |
53 | 7282a033 | Gerd Hoffmann | .name = "file",
|
54 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
55 | 7282a033 | Gerd Hoffmann | .help = "disk image",
|
56 | 7282a033 | Gerd Hoffmann | },{ |
57 | 7282a033 | Gerd Hoffmann | .name = "cache",
|
58 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
59 | 92196b2f | Stefan Hajnoczi | .help = "host cache usage (none, writeback, writethrough, "
|
60 | 92196b2f | Stefan Hajnoczi | "directsync, unsafe)",
|
61 | 7282a033 | Gerd Hoffmann | },{ |
62 | 5c6c3a6c | Christoph Hellwig | .name = "aio",
|
63 | 5c6c3a6c | Christoph Hellwig | .type = QEMU_OPT_STRING, |
64 | 5c6c3a6c | Christoph Hellwig | .help = "host AIO implementation (threads, native)",
|
65 | 5c6c3a6c | Christoph Hellwig | },{ |
66 | 7282a033 | Gerd Hoffmann | .name = "format",
|
67 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
68 | 7282a033 | Gerd Hoffmann | .help = "disk format (raw, qcow2, ...)",
|
69 | 7282a033 | Gerd Hoffmann | },{ |
70 | 7282a033 | Gerd Hoffmann | .name = "serial",
|
71 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
72 | 69d7e218 | Luiz Capitulino | .help = "disk serial number",
|
73 | 7282a033 | Gerd Hoffmann | },{ |
74 | e9b2e818 | Kevin Wolf | .name = "rerror",
|
75 | e9b2e818 | Kevin Wolf | .type = QEMU_OPT_STRING, |
76 | 69d7e218 | Luiz Capitulino | .help = "read error action",
|
77 | e9b2e818 | Kevin Wolf | },{ |
78 | 7282a033 | Gerd Hoffmann | .name = "werror",
|
79 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
80 | 69d7e218 | Luiz Capitulino | .help = "write error action",
|
81 | 7282a033 | Gerd Hoffmann | },{ |
82 | 7282a033 | Gerd Hoffmann | .name = "addr",
|
83 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
84 | 7282a033 | Gerd Hoffmann | .help = "pci address (virtio only)",
|
85 | 59f2689d | Naphtali Sprei | },{ |
86 | 59f2689d | Naphtali Sprei | .name = "readonly",
|
87 | 59f2689d | Naphtali Sprei | .type = QEMU_OPT_BOOL, |
88 | 69d7e218 | Luiz Capitulino | .help = "open drive file as read-only",
|
89 | 0563e191 | Zhi Yong Wu | },{ |
90 | 0563e191 | Zhi Yong Wu | .name = "iops",
|
91 | 0563e191 | Zhi Yong Wu | .type = QEMU_OPT_NUMBER, |
92 | 0563e191 | Zhi Yong Wu | .help = "limit total I/O operations per second",
|
93 | 0563e191 | Zhi Yong Wu | },{ |
94 | 0563e191 | Zhi Yong Wu | .name = "iops_rd",
|
95 | 0563e191 | Zhi Yong Wu | .type = QEMU_OPT_NUMBER, |
96 | 0563e191 | Zhi Yong Wu | .help = "limit read operations per second",
|
97 | 0563e191 | Zhi Yong Wu | },{ |
98 | 0563e191 | Zhi Yong Wu | .name = "iops_wr",
|
99 | 0563e191 | Zhi Yong Wu | .type = QEMU_OPT_NUMBER, |
100 | 0563e191 | Zhi Yong Wu | .help = "limit write operations per second",
|
101 | 0563e191 | Zhi Yong Wu | },{ |
102 | 0563e191 | Zhi Yong Wu | .name = "bps",
|
103 | 0563e191 | Zhi Yong Wu | .type = QEMU_OPT_NUMBER, |
104 | 0563e191 | Zhi Yong Wu | .help = "limit total bytes per second",
|
105 | 0563e191 | Zhi Yong Wu | },{ |
106 | 0563e191 | Zhi Yong Wu | .name = "bps_rd",
|
107 | 0563e191 | Zhi Yong Wu | .type = QEMU_OPT_NUMBER, |
108 | 0563e191 | Zhi Yong Wu | .help = "limit read bytes per second",
|
109 | 0563e191 | Zhi Yong Wu | },{ |
110 | 0563e191 | Zhi Yong Wu | .name = "bps_wr",
|
111 | 0563e191 | Zhi Yong Wu | .type = QEMU_OPT_NUMBER, |
112 | 0563e191 | Zhi Yong Wu | .help = "limit write bytes per second",
|
113 | fb0490f6 | Stefan Hajnoczi | },{ |
114 | fb0490f6 | Stefan Hajnoczi | .name = "copy-on-read",
|
115 | fb0490f6 | Stefan Hajnoczi | .type = QEMU_OPT_BOOL, |
116 | fb0490f6 | Stefan Hajnoczi | .help = "copy read data from backing file into image file",
|
117 | 7282a033 | Gerd Hoffmann | }, |
118 | 26056e0c | Jes Sorensen | { /* end of list */ }
|
119 | 7282a033 | Gerd Hoffmann | }, |
120 | 7282a033 | Gerd Hoffmann | }; |
121 | 7282a033 | Gerd Hoffmann | |
122 | f9dadc98 | Ronnie Sahlberg | static QemuOptsList qemu_iscsi_opts = {
|
123 | f9dadc98 | Ronnie Sahlberg | .name = "iscsi",
|
124 | f9dadc98 | Ronnie Sahlberg | .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head), |
125 | f9dadc98 | Ronnie Sahlberg | .desc = { |
126 | f9dadc98 | Ronnie Sahlberg | { |
127 | f9dadc98 | Ronnie Sahlberg | .name = "user",
|
128 | f9dadc98 | Ronnie Sahlberg | .type = QEMU_OPT_STRING, |
129 | f9dadc98 | Ronnie Sahlberg | .help = "username for CHAP authentication to target",
|
130 | f9dadc98 | Ronnie Sahlberg | },{ |
131 | f9dadc98 | Ronnie Sahlberg | .name = "password",
|
132 | f9dadc98 | Ronnie Sahlberg | .type = QEMU_OPT_STRING, |
133 | f9dadc98 | Ronnie Sahlberg | .help = "password for CHAP authentication to target",
|
134 | f9dadc98 | Ronnie Sahlberg | },{ |
135 | f9dadc98 | Ronnie Sahlberg | .name = "header-digest",
|
136 | f9dadc98 | Ronnie Sahlberg | .type = QEMU_OPT_STRING, |
137 | f9dadc98 | Ronnie Sahlberg | .help = "HeaderDigest setting. "
|
138 | f9dadc98 | Ronnie Sahlberg | "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
|
139 | f9dadc98 | Ronnie Sahlberg | },{ |
140 | f9dadc98 | Ronnie Sahlberg | .name = "initiator-name",
|
141 | f9dadc98 | Ronnie Sahlberg | .type = QEMU_OPT_STRING, |
142 | f9dadc98 | Ronnie Sahlberg | .help = "Initiator iqn name to use when connecting",
|
143 | f9dadc98 | Ronnie Sahlberg | }, |
144 | f9dadc98 | Ronnie Sahlberg | { /* end of list */ }
|
145 | f9dadc98 | Ronnie Sahlberg | }, |
146 | f9dadc98 | Ronnie Sahlberg | }; |
147 | f9dadc98 | Ronnie Sahlberg | |
148 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_chardev_opts = {
|
149 | 191bc01b | Gerd Hoffmann | .name = "chardev",
|
150 | 8212c64f | Markus Armbruster | .implied_opt_name = "backend",
|
151 | 72cf2d4f | Blue Swirl | .head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head), |
152 | 191bc01b | Gerd Hoffmann | .desc = { |
153 | 7d31544f | Gerd Hoffmann | { |
154 | 7d31544f | Gerd Hoffmann | .name = "backend",
|
155 | 7d31544f | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
156 | 7d31544f | Gerd Hoffmann | },{ |
157 | 7d31544f | Gerd Hoffmann | .name = "path",
|
158 | 7d31544f | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
159 | aeb2c47a | Gerd Hoffmann | },{ |
160 | aeb2c47a | Gerd Hoffmann | .name = "host",
|
161 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
162 | aeb2c47a | Gerd Hoffmann | },{ |
163 | aeb2c47a | Gerd Hoffmann | .name = "port",
|
164 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
165 | aeb2c47a | Gerd Hoffmann | },{ |
166 | 7e1b35b4 | Gerd Hoffmann | .name = "localaddr",
|
167 | 7e1b35b4 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
168 | 7e1b35b4 | Gerd Hoffmann | },{ |
169 | 7e1b35b4 | Gerd Hoffmann | .name = "localport",
|
170 | 7e1b35b4 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
171 | 7e1b35b4 | Gerd Hoffmann | },{ |
172 | aeb2c47a | Gerd Hoffmann | .name = "to",
|
173 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
174 | aeb2c47a | Gerd Hoffmann | },{ |
175 | aeb2c47a | Gerd Hoffmann | .name = "ipv4",
|
176 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
177 | aeb2c47a | Gerd Hoffmann | },{ |
178 | aeb2c47a | Gerd Hoffmann | .name = "ipv6",
|
179 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
180 | aeb2c47a | Gerd Hoffmann | },{ |
181 | aeb2c47a | Gerd Hoffmann | .name = "wait",
|
182 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
183 | aeb2c47a | Gerd Hoffmann | },{ |
184 | aeb2c47a | Gerd Hoffmann | .name = "server",
|
185 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
186 | aeb2c47a | Gerd Hoffmann | },{ |
187 | aeb2c47a | Gerd Hoffmann | .name = "delay",
|
188 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
189 | aeb2c47a | Gerd Hoffmann | },{ |
190 | aeb2c47a | Gerd Hoffmann | .name = "telnet",
|
191 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
192 | 6ea314d9 | Gerd Hoffmann | },{ |
193 | 6ea314d9 | Gerd Hoffmann | .name = "width",
|
194 | 6ea314d9 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
195 | 6ea314d9 | Gerd Hoffmann | },{ |
196 | 6ea314d9 | Gerd Hoffmann | .name = "height",
|
197 | 6ea314d9 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
198 | 6ea314d9 | Gerd Hoffmann | },{ |
199 | 6ea314d9 | Gerd Hoffmann | .name = "cols",
|
200 | 6ea314d9 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
201 | 6ea314d9 | Gerd Hoffmann | },{ |
202 | 6ea314d9 | Gerd Hoffmann | .name = "rows",
|
203 | 6ea314d9 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
204 | c845f401 | Gerd Hoffmann | },{ |
205 | c845f401 | Gerd Hoffmann | .name = "mux",
|
206 | c845f401 | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
207 | 5989020b | Kusanagi Kouichi | },{ |
208 | 5989020b | Kusanagi Kouichi | .name = "signal",
|
209 | 5989020b | Kusanagi Kouichi | .type = QEMU_OPT_BOOL, |
210 | cbcc6336 | Alon Levy | },{ |
211 | cbcc6336 | Alon Levy | .name = "name",
|
212 | cbcc6336 | Alon Levy | .type = QEMU_OPT_STRING, |
213 | cbcc6336 | Alon Levy | },{ |
214 | cbcc6336 | Alon Levy | .name = "debug",
|
215 | cbcc6336 | Alon Levy | .type = QEMU_OPT_NUMBER, |
216 | 7d31544f | Gerd Hoffmann | }, |
217 | 26056e0c | Jes Sorensen | { /* end of list */ }
|
218 | 191bc01b | Gerd Hoffmann | }, |
219 | 191bc01b | Gerd Hoffmann | }; |
220 | 191bc01b | Gerd Hoffmann | |
221 | 74db920c | Gautham R Shenoy | QemuOptsList qemu_fsdev_opts = { |
222 | 74db920c | Gautham R Shenoy | .name = "fsdev",
|
223 | fbcbf101 | Aneesh Kumar K.V | .implied_opt_name = "fsdriver",
|
224 | 74db920c | Gautham R Shenoy | .head = QTAILQ_HEAD_INITIALIZER(qemu_fsdev_opts.head), |
225 | 74db920c | Gautham R Shenoy | .desc = { |
226 | 74db920c | Gautham R Shenoy | { |
227 | fbcbf101 | Aneesh Kumar K.V | .name = "fsdriver",
|
228 | 74db920c | Gautham R Shenoy | .type = QEMU_OPT_STRING, |
229 | 74db920c | Gautham R Shenoy | }, { |
230 | 74db920c | Gautham R Shenoy | .name = "path",
|
231 | 74db920c | Gautham R Shenoy | .type = QEMU_OPT_STRING, |
232 | 9ce56db6 | Venkateswararao Jujjuri (JV) | }, { |
233 | 9ce56db6 | Venkateswararao Jujjuri (JV) | .name = "security_model",
|
234 | 9ce56db6 | Venkateswararao Jujjuri (JV) | .type = QEMU_OPT_STRING, |
235 | d3ab98e6 | Aneesh Kumar K.V | }, { |
236 | d3ab98e6 | Aneesh Kumar K.V | .name = "writeout",
|
237 | d3ab98e6 | Aneesh Kumar K.V | .type = QEMU_OPT_STRING, |
238 | 2c74c2cb | M. Mohan Kumar | }, { |
239 | 2c74c2cb | M. Mohan Kumar | .name = "readonly",
|
240 | 2c74c2cb | M. Mohan Kumar | .type = QEMU_OPT_BOOL, |
241 | 84a87cc4 | M. Mohan Kumar | |
242 | 84a87cc4 | M. Mohan Kumar | }, { |
243 | 84a87cc4 | M. Mohan Kumar | .name = "socket",
|
244 | 84a87cc4 | M. Mohan Kumar | .type = QEMU_OPT_STRING, |
245 | 4c793dda | M. Mohan Kumar | }, { |
246 | 4c793dda | M. Mohan Kumar | .name = "sock_fd",
|
247 | 4c793dda | M. Mohan Kumar | .type = QEMU_OPT_NUMBER, |
248 | 74db920c | Gautham R Shenoy | }, |
249 | 2c74c2cb | M. Mohan Kumar | |
250 | 74db920c | Gautham R Shenoy | { /*End of list */ }
|
251 | 74db920c | Gautham R Shenoy | }, |
252 | 74db920c | Gautham R Shenoy | }; |
253 | 74db920c | Gautham R Shenoy | |
254 | 3d54abc7 | Gautham R Shenoy | QemuOptsList qemu_virtfs_opts = { |
255 | 3d54abc7 | Gautham R Shenoy | .name = "virtfs",
|
256 | fbcbf101 | Aneesh Kumar K.V | .implied_opt_name = "fsdriver",
|
257 | 3d54abc7 | Gautham R Shenoy | .head = QTAILQ_HEAD_INITIALIZER(qemu_virtfs_opts.head), |
258 | 3d54abc7 | Gautham R Shenoy | .desc = { |
259 | 3d54abc7 | Gautham R Shenoy | { |
260 | fbcbf101 | Aneesh Kumar K.V | .name = "fsdriver",
|
261 | 3d54abc7 | Gautham R Shenoy | .type = QEMU_OPT_STRING, |
262 | 3d54abc7 | Gautham R Shenoy | }, { |
263 | 3d54abc7 | Gautham R Shenoy | .name = "path",
|
264 | 3d54abc7 | Gautham R Shenoy | .type = QEMU_OPT_STRING, |
265 | 3d54abc7 | Gautham R Shenoy | }, { |
266 | 3d54abc7 | Gautham R Shenoy | .name = "mount_tag",
|
267 | 3d54abc7 | Gautham R Shenoy | .type = QEMU_OPT_STRING, |
268 | 9ce56db6 | Venkateswararao Jujjuri (JV) | }, { |
269 | 9ce56db6 | Venkateswararao Jujjuri (JV) | .name = "security_model",
|
270 | 9ce56db6 | Venkateswararao Jujjuri (JV) | .type = QEMU_OPT_STRING, |
271 | d3ab98e6 | Aneesh Kumar K.V | }, { |
272 | d3ab98e6 | Aneesh Kumar K.V | .name = "writeout",
|
273 | d3ab98e6 | Aneesh Kumar K.V | .type = QEMU_OPT_STRING, |
274 | 2c74c2cb | M. Mohan Kumar | }, { |
275 | 2c74c2cb | M. Mohan Kumar | .name = "readonly",
|
276 | 2c74c2cb | M. Mohan Kumar | .type = QEMU_OPT_BOOL, |
277 | 4c793dda | M. Mohan Kumar | }, { |
278 | 84a87cc4 | M. Mohan Kumar | .name = "socket",
|
279 | 84a87cc4 | M. Mohan Kumar | .type = QEMU_OPT_STRING, |
280 | 84a87cc4 | M. Mohan Kumar | }, { |
281 | 4c793dda | M. Mohan Kumar | .name = "sock_fd",
|
282 | 4c793dda | M. Mohan Kumar | .type = QEMU_OPT_NUMBER, |
283 | 3d54abc7 | Gautham R Shenoy | }, |
284 | 3d54abc7 | Gautham R Shenoy | |
285 | 3d54abc7 | Gautham R Shenoy | { /*End of list */ }
|
286 | 3d54abc7 | Gautham R Shenoy | }, |
287 | 3d54abc7 | Gautham R Shenoy | }; |
288 | 3d54abc7 | Gautham R Shenoy | |
289 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_device_opts = {
|
290 | f31d07d1 | Gerd Hoffmann | .name = "device",
|
291 | 8212c64f | Markus Armbruster | .implied_opt_name = "driver",
|
292 | 72cf2d4f | Blue Swirl | .head = QTAILQ_HEAD_INITIALIZER(qemu_device_opts.head), |
293 | f31d07d1 | Gerd Hoffmann | .desc = { |
294 | f31d07d1 | Gerd Hoffmann | /*
|
295 | f31d07d1 | Gerd Hoffmann | * no elements => accept any
|
296 | f31d07d1 | Gerd Hoffmann | * sanity checking will happen later
|
297 | f31d07d1 | Gerd Hoffmann | * when setting device properties
|
298 | f31d07d1 | Gerd Hoffmann | */
|
299 | 26056e0c | Jes Sorensen | { /* end of list */ }
|
300 | f31d07d1 | Gerd Hoffmann | }, |
301 | f31d07d1 | Gerd Hoffmann | }; |
302 | f31d07d1 | Gerd Hoffmann | |
303 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_netdev_opts = {
|
304 | a1ea458f | Mark McLoughlin | .name = "netdev",
|
305 | 8212c64f | Markus Armbruster | .implied_opt_name = "type",
|
306 | a1ea458f | Mark McLoughlin | .head = QTAILQ_HEAD_INITIALIZER(qemu_netdev_opts.head), |
307 | a1ea458f | Mark McLoughlin | .desc = { |
308 | a1ea458f | Mark McLoughlin | /*
|
309 | a1ea458f | Mark McLoughlin | * no elements => accept any params
|
310 | a1ea458f | Mark McLoughlin | * validation will happen later
|
311 | a1ea458f | Mark McLoughlin | */
|
312 | a1ea458f | Mark McLoughlin | { /* end of list */ }
|
313 | a1ea458f | Mark McLoughlin | }, |
314 | a1ea458f | Mark McLoughlin | }; |
315 | a1ea458f | Mark McLoughlin | |
316 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_net_opts = {
|
317 | 8119b33d | Mark McLoughlin | .name = "net",
|
318 | 8212c64f | Markus Armbruster | .implied_opt_name = "type",
|
319 | 8119b33d | Mark McLoughlin | .head = QTAILQ_HEAD_INITIALIZER(qemu_net_opts.head), |
320 | 8119b33d | Mark McLoughlin | .desc = { |
321 | 8119b33d | Mark McLoughlin | /*
|
322 | 8119b33d | Mark McLoughlin | * no elements => accept any params
|
323 | 8119b33d | Mark McLoughlin | * validation will happen later
|
324 | 8119b33d | Mark McLoughlin | */
|
325 | 8119b33d | Mark McLoughlin | { /* end of list */ }
|
326 | 8119b33d | Mark McLoughlin | }, |
327 | 8119b33d | Mark McLoughlin | }; |
328 | 8119b33d | Mark McLoughlin | |
329 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_rtc_opts = {
|
330 | 1ed2fc1f | Jan Kiszka | .name = "rtc",
|
331 | 1ed2fc1f | Jan Kiszka | .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head), |
332 | 1ed2fc1f | Jan Kiszka | .desc = { |
333 | 1ed2fc1f | Jan Kiszka | { |
334 | 1ed2fc1f | Jan Kiszka | .name = "base",
|
335 | 1ed2fc1f | Jan Kiszka | .type = QEMU_OPT_STRING, |
336 | 6875204c | Jan Kiszka | },{ |
337 | 6875204c | Jan Kiszka | .name = "clock",
|
338 | 6875204c | Jan Kiszka | .type = QEMU_OPT_STRING, |
339 | 1ed2fc1f | Jan Kiszka | },{ |
340 | 1ed2fc1f | Jan Kiszka | .name = "driftfix",
|
341 | 1ed2fc1f | Jan Kiszka | .type = QEMU_OPT_STRING, |
342 | 1ed2fc1f | Jan Kiszka | }, |
343 | 26056e0c | Jes Sorensen | { /* end of list */ }
|
344 | 1ed2fc1f | Jan Kiszka | }, |
345 | 1ed2fc1f | Jan Kiszka | }; |
346 | 1ed2fc1f | Jan Kiszka | |
347 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_global_opts = {
|
348 | d0fef6fb | Gerd Hoffmann | .name = "global",
|
349 | d0fef6fb | Gerd Hoffmann | .head = QTAILQ_HEAD_INITIALIZER(qemu_global_opts.head), |
350 | d0fef6fb | Gerd Hoffmann | .desc = { |
351 | d0fef6fb | Gerd Hoffmann | { |
352 | d0fef6fb | Gerd Hoffmann | .name = "driver",
|
353 | d0fef6fb | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
354 | d0fef6fb | Gerd Hoffmann | },{ |
355 | d0fef6fb | Gerd Hoffmann | .name = "property",
|
356 | d0fef6fb | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
357 | d0fef6fb | Gerd Hoffmann | },{ |
358 | d0fef6fb | Gerd Hoffmann | .name = "value",
|
359 | d0fef6fb | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
360 | d0fef6fb | Gerd Hoffmann | }, |
361 | 26056e0c | Jes Sorensen | { /* end of list */ }
|
362 | d0fef6fb | Gerd Hoffmann | }, |
363 | d0fef6fb | Gerd Hoffmann | }; |
364 | d0fef6fb | Gerd Hoffmann | |
365 | 7d76ad4f | Eduardo Otubo | QemuOptsList qemu_sandbox_opts = { |
366 | 7d76ad4f | Eduardo Otubo | .name = "sandbox",
|
367 | 7d76ad4f | Eduardo Otubo | .implied_opt_name = "enable",
|
368 | 7d76ad4f | Eduardo Otubo | .head = QTAILQ_HEAD_INITIALIZER(qemu_sandbox_opts.head), |
369 | 7d76ad4f | Eduardo Otubo | .desc = { |
370 | 7d76ad4f | Eduardo Otubo | { |
371 | 7d76ad4f | Eduardo Otubo | .name = "enable",
|
372 | 7d76ad4f | Eduardo Otubo | .type = QEMU_OPT_BOOL, |
373 | 7d76ad4f | Eduardo Otubo | }, |
374 | 7d76ad4f | Eduardo Otubo | { /* end of list */ }
|
375 | 7d76ad4f | Eduardo Otubo | }, |
376 | 7d76ad4f | Eduardo Otubo | }; |
377 | 7d76ad4f | Eduardo Otubo | |
378 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_mon_opts = {
|
379 | 88589343 | Gerd Hoffmann | .name = "mon",
|
380 | 8212c64f | Markus Armbruster | .implied_opt_name = "chardev",
|
381 | 88589343 | Gerd Hoffmann | .head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head), |
382 | 88589343 | Gerd Hoffmann | .desc = { |
383 | 88589343 | Gerd Hoffmann | { |
384 | 88589343 | Gerd Hoffmann | .name = "mode",
|
385 | 88589343 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
386 | 88589343 | Gerd Hoffmann | },{ |
387 | 88589343 | Gerd Hoffmann | .name = "chardev",
|
388 | 88589343 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
389 | 88589343 | Gerd Hoffmann | },{ |
390 | 88589343 | Gerd Hoffmann | .name = "default",
|
391 | 88589343 | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
392 | 39eaab9a | Daniel P. Berrange | },{ |
393 | 39eaab9a | Daniel P. Berrange | .name = "pretty",
|
394 | 39eaab9a | Daniel P. Berrange | .type = QEMU_OPT_BOOL, |
395 | 88589343 | Gerd Hoffmann | }, |
396 | 26056e0c | Jes Sorensen | { /* end of list */ }
|
397 | 88589343 | Gerd Hoffmann | }, |
398 | 88589343 | Gerd Hoffmann | }; |
399 | 88589343 | Gerd Hoffmann | |
400 | ab6540d5 | Prerna Saxena | static QemuOptsList qemu_trace_opts = {
|
401 | ab6540d5 | Prerna Saxena | .name = "trace",
|
402 | ab6540d5 | Prerna Saxena | .implied_opt_name = "trace",
|
403 | ab6540d5 | Prerna Saxena | .head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head), |
404 | ab6540d5 | Prerna Saxena | .desc = { |
405 | ab6540d5 | Prerna Saxena | { |
406 | 23d15e86 | Lluรญs | .name = "events",
|
407 | 23d15e86 | Lluรญs | .type = QEMU_OPT_STRING, |
408 | 23d15e86 | Lluรญs | },{ |
409 | ab6540d5 | Prerna Saxena | .name = "file",
|
410 | ab6540d5 | Prerna Saxena | .type = QEMU_OPT_STRING, |
411 | ab6540d5 | Prerna Saxena | }, |
412 | 44bd6907 | Gerd Hoffmann | { /* end of list */ }
|
413 | ab6540d5 | Prerna Saxena | }, |
414 | ab6540d5 | Prerna Saxena | }; |
415 | ab6540d5 | Prerna Saxena | |
416 | 3329f07b | Gerd Hoffmann | static QemuOptsList qemu_cpudef_opts = {
|
417 | b5ec5ce0 | john cooper | .name = "cpudef",
|
418 | b5ec5ce0 | john cooper | .head = QTAILQ_HEAD_INITIALIZER(qemu_cpudef_opts.head), |
419 | b5ec5ce0 | john cooper | .desc = { |
420 | b5ec5ce0 | john cooper | { |
421 | b5ec5ce0 | john cooper | .name = "name",
|
422 | b5ec5ce0 | john cooper | .type = QEMU_OPT_STRING, |
423 | b5ec5ce0 | john cooper | },{ |
424 | b5ec5ce0 | john cooper | .name = "level",
|
425 | b5ec5ce0 | john cooper | .type = QEMU_OPT_NUMBER, |
426 | b5ec5ce0 | john cooper | },{ |
427 | b5ec5ce0 | john cooper | .name = "vendor",
|
428 | b5ec5ce0 | john cooper | .type = QEMU_OPT_STRING, |
429 | b5ec5ce0 | john cooper | },{ |
430 | b5ec5ce0 | john cooper | .name = "family",
|
431 | b5ec5ce0 | john cooper | .type = QEMU_OPT_NUMBER, |
432 | b5ec5ce0 | john cooper | },{ |
433 | b5ec5ce0 | john cooper | .name = "model",
|
434 | b5ec5ce0 | john cooper | .type = QEMU_OPT_NUMBER, |
435 | b5ec5ce0 | john cooper | },{ |
436 | b5ec5ce0 | john cooper | .name = "stepping",
|
437 | b5ec5ce0 | john cooper | .type = QEMU_OPT_NUMBER, |
438 | b5ec5ce0 | john cooper | },{ |
439 | b5ec5ce0 | john cooper | .name = "feature_edx", /* cpuid 0000_0001.edx */ |
440 | b5ec5ce0 | john cooper | .type = QEMU_OPT_STRING, |
441 | b5ec5ce0 | john cooper | },{ |
442 | b5ec5ce0 | john cooper | .name = "feature_ecx", /* cpuid 0000_0001.ecx */ |
443 | b5ec5ce0 | john cooper | .type = QEMU_OPT_STRING, |
444 | b5ec5ce0 | john cooper | },{ |
445 | b5ec5ce0 | john cooper | .name = "extfeature_edx", /* cpuid 8000_0001.edx */ |
446 | b5ec5ce0 | john cooper | .type = QEMU_OPT_STRING, |
447 | b5ec5ce0 | john cooper | },{ |
448 | b5ec5ce0 | john cooper | .name = "extfeature_ecx", /* cpuid 8000_0001.ecx */ |
449 | b5ec5ce0 | john cooper | .type = QEMU_OPT_STRING, |
450 | b5ec5ce0 | john cooper | },{ |
451 | b5ec5ce0 | john cooper | .name = "xlevel",
|
452 | b5ec5ce0 | john cooper | .type = QEMU_OPT_NUMBER, |
453 | b5ec5ce0 | john cooper | },{ |
454 | b5ec5ce0 | john cooper | .name = "model_id",
|
455 | b5ec5ce0 | john cooper | .type = QEMU_OPT_STRING, |
456 | b5ec5ce0 | john cooper | },{ |
457 | b5ec5ce0 | john cooper | .name = "vendor_override",
|
458 | b5ec5ce0 | john cooper | .type = QEMU_OPT_NUMBER, |
459 | b5ec5ce0 | john cooper | }, |
460 | b5ec5ce0 | john cooper | { /* end of list */ }
|
461 | b5ec5ce0 | john cooper | }, |
462 | b5ec5ce0 | john cooper | }; |
463 | b5ec5ce0 | john cooper | |
464 | 29b0040b | Gerd Hoffmann | QemuOptsList qemu_spice_opts = { |
465 | 29b0040b | Gerd Hoffmann | .name = "spice",
|
466 | 29b0040b | Gerd Hoffmann | .head = QTAILQ_HEAD_INITIALIZER(qemu_spice_opts.head), |
467 | 29b0040b | Gerd Hoffmann | .desc = { |
468 | 29b0040b | Gerd Hoffmann | { |
469 | 29b0040b | Gerd Hoffmann | .name = "port",
|
470 | 29b0040b | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
471 | 29b0040b | Gerd Hoffmann | },{ |
472 | c448e855 | Gerd Hoffmann | .name = "tls-port",
|
473 | c448e855 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
474 | c448e855 | Gerd Hoffmann | },{ |
475 | 333b0eeb | Gerd Hoffmann | .name = "addr",
|
476 | 333b0eeb | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
477 | 333b0eeb | Gerd Hoffmann | },{ |
478 | 333b0eeb | Gerd Hoffmann | .name = "ipv4",
|
479 | 333b0eeb | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
480 | 333b0eeb | Gerd Hoffmann | },{ |
481 | 333b0eeb | Gerd Hoffmann | .name = "ipv6",
|
482 | 333b0eeb | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
483 | 333b0eeb | Gerd Hoffmann | },{ |
484 | 29b0040b | Gerd Hoffmann | .name = "password",
|
485 | 29b0040b | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
486 | 29b0040b | Gerd Hoffmann | },{ |
487 | 29b0040b | Gerd Hoffmann | .name = "disable-ticketing",
|
488 | 29b0040b | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
489 | c448e855 | Gerd Hoffmann | },{ |
490 | d4970b07 | Hans de Goede | .name = "disable-copy-paste",
|
491 | d4970b07 | Hans de Goede | .type = QEMU_OPT_BOOL, |
492 | d4970b07 | Hans de Goede | },{ |
493 | 48b3ed0a | Marc-Andrรฉ Lureau | .name = "sasl",
|
494 | 48b3ed0a | Marc-Andrรฉ Lureau | .type = QEMU_OPT_BOOL, |
495 | 48b3ed0a | Marc-Andrรฉ Lureau | },{ |
496 | c448e855 | Gerd Hoffmann | .name = "x509-dir",
|
497 | c448e855 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
498 | c448e855 | Gerd Hoffmann | },{ |
499 | c448e855 | Gerd Hoffmann | .name = "x509-key-file",
|
500 | c448e855 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
501 | c448e855 | Gerd Hoffmann | },{ |
502 | c448e855 | Gerd Hoffmann | .name = "x509-key-password",
|
503 | c448e855 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
504 | c448e855 | Gerd Hoffmann | },{ |
505 | c448e855 | Gerd Hoffmann | .name = "x509-cert-file",
|
506 | c448e855 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
507 | c448e855 | Gerd Hoffmann | },{ |
508 | c448e855 | Gerd Hoffmann | .name = "x509-cacert-file",
|
509 | c448e855 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
510 | c448e855 | Gerd Hoffmann | },{ |
511 | c448e855 | Gerd Hoffmann | .name = "x509-dh-key-file",
|
512 | c448e855 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
513 | c448e855 | Gerd Hoffmann | },{ |
514 | c448e855 | Gerd Hoffmann | .name = "tls-ciphers",
|
515 | c448e855 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
516 | 9f04e09e | Yonit Halperin | },{ |
517 | 17b6dea0 | Gerd Hoffmann | .name = "tls-channel",
|
518 | 17b6dea0 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
519 | 17b6dea0 | Gerd Hoffmann | },{ |
520 | 17b6dea0 | Gerd Hoffmann | .name = "plaintext-channel",
|
521 | 17b6dea0 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
522 | 17b6dea0 | Gerd Hoffmann | },{ |
523 | 9f04e09e | Yonit Halperin | .name = "image-compression",
|
524 | 9f04e09e | Yonit Halperin | .type = QEMU_OPT_STRING, |
525 | 9f04e09e | Yonit Halperin | },{ |
526 | 9f04e09e | Yonit Halperin | .name = "jpeg-wan-compression",
|
527 | 9f04e09e | Yonit Halperin | .type = QEMU_OPT_STRING, |
528 | 9f04e09e | Yonit Halperin | },{ |
529 | 9f04e09e | Yonit Halperin | .name = "zlib-glz-wan-compression",
|
530 | 9f04e09e | Yonit Halperin | .type = QEMU_OPT_STRING, |
531 | 84a23f25 | Gerd Hoffmann | },{ |
532 | 84a23f25 | Gerd Hoffmann | .name = "streaming-video",
|
533 | 84a23f25 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
534 | 84a23f25 | Gerd Hoffmann | },{ |
535 | 84a23f25 | Gerd Hoffmann | .name = "agent-mouse",
|
536 | 84a23f25 | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
537 | 84a23f25 | Gerd Hoffmann | },{ |
538 | 84a23f25 | Gerd Hoffmann | .name = "playback-compression",
|
539 | 84a23f25 | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
540 | 8c957053 | Yonit Halperin | }, { |
541 | 8c957053 | Yonit Halperin | .name = "seamless-migration",
|
542 | 8c957053 | Yonit Halperin | .type = QEMU_OPT_BOOL, |
543 | 29b0040b | Gerd Hoffmann | }, |
544 | 44bd6907 | Gerd Hoffmann | { /* end of list */ }
|
545 | 29b0040b | Gerd Hoffmann | }, |
546 | 29b0040b | Gerd Hoffmann | }; |
547 | 29b0040b | Gerd Hoffmann | |
548 | 2e55e842 | Gleb Natapov | QemuOptsList qemu_option_rom_opts = { |
549 | 2e55e842 | Gleb Natapov | .name = "option-rom",
|
550 | 2e55e842 | Gleb Natapov | .implied_opt_name = "romfile",
|
551 | 2e55e842 | Gleb Natapov | .head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head), |
552 | 2e55e842 | Gleb Natapov | .desc = { |
553 | 2e55e842 | Gleb Natapov | { |
554 | 2e55e842 | Gleb Natapov | .name = "bootindex",
|
555 | 2e55e842 | Gleb Natapov | .type = QEMU_OPT_NUMBER, |
556 | 2e55e842 | Gleb Natapov | }, { |
557 | 2e55e842 | Gleb Natapov | .name = "romfile",
|
558 | 2e55e842 | Gleb Natapov | .type = QEMU_OPT_STRING, |
559 | 2e55e842 | Gleb Natapov | }, |
560 | 44bd6907 | Gerd Hoffmann | { /* end of list */ }
|
561 | 2e55e842 | Gleb Natapov | }, |
562 | 2e55e842 | Gleb Natapov | }; |
563 | 2e55e842 | Gleb Natapov | |
564 | 303d4e86 | Anthony PERARD | static QemuOptsList qemu_machine_opts = {
|
565 | 303d4e86 | Anthony PERARD | .name = "machine",
|
566 | 9052ea6b | Jan Kiszka | .implied_opt_name = "type",
|
567 | 9de36b1a | Peter Maydell | .merge_lists = true,
|
568 | 303d4e86 | Anthony PERARD | .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head), |
569 | 303d4e86 | Anthony PERARD | .desc = { |
570 | 303d4e86 | Anthony PERARD | { |
571 | 9052ea6b | Jan Kiszka | .name = "type",
|
572 | 9052ea6b | Jan Kiszka | .type = QEMU_OPT_STRING, |
573 | 9052ea6b | Jan Kiszka | .help = "emulated machine"
|
574 | 9052ea6b | Jan Kiszka | }, { |
575 | 303d4e86 | Anthony PERARD | .name = "accel",
|
576 | 303d4e86 | Anthony PERARD | .type = QEMU_OPT_STRING, |
577 | 303d4e86 | Anthony PERARD | .help = "accelerator list",
|
578 | 6a48ffaa | Jan Kiszka | }, { |
579 | 6a48ffaa | Jan Kiszka | .name = "kernel_irqchip",
|
580 | 6a48ffaa | Jan Kiszka | .type = QEMU_OPT_BOOL, |
581 | 6a48ffaa | Jan Kiszka | .help = "use KVM in-kernel irqchip",
|
582 | 39d6960a | Jan Kiszka | }, { |
583 | 39d6960a | Jan Kiszka | .name = "kvm_shadow_mem",
|
584 | 39d6960a | Jan Kiszka | .type = QEMU_OPT_SIZE, |
585 | 39d6960a | Jan Kiszka | .help = "KVM shadow MMU size",
|
586 | a0abe474 | Peter Maydell | }, { |
587 | a0abe474 | Peter Maydell | .name = "kernel",
|
588 | a0abe474 | Peter Maydell | .type = QEMU_OPT_STRING, |
589 | a0abe474 | Peter Maydell | .help = "Linux kernel image file",
|
590 | a0abe474 | Peter Maydell | }, { |
591 | a0abe474 | Peter Maydell | .name = "initrd",
|
592 | a0abe474 | Peter Maydell | .type = QEMU_OPT_STRING, |
593 | a0abe474 | Peter Maydell | .help = "Linux initial ramdisk file",
|
594 | a0abe474 | Peter Maydell | }, { |
595 | a0abe474 | Peter Maydell | .name = "append",
|
596 | a0abe474 | Peter Maydell | .type = QEMU_OPT_STRING, |
597 | a0abe474 | Peter Maydell | .help = "Linux kernel command line",
|
598 | 412beee6 | Grant Likely | }, { |
599 | 412beee6 | Grant Likely | .name = "dtb",
|
600 | 412beee6 | Grant Likely | .type = QEMU_OPT_STRING, |
601 | 412beee6 | Grant Likely | .help = "Linux kernel device tree file",
|
602 | 25b42708 | Alexander Graf | }, { |
603 | 25b42708 | Alexander Graf | .name = "dumpdtb",
|
604 | 25b42708 | Alexander Graf | .type = QEMU_OPT_STRING, |
605 | 25b42708 | Alexander Graf | .help = "Dump current dtb to a file and quit",
|
606 | 4b1b1c89 | Alexander Graf | }, { |
607 | 4b1b1c89 | Alexander Graf | .name = "phandle_start",
|
608 | 4b1b1c89 | Alexander Graf | .type = QEMU_OPT_STRING, |
609 | 4b1b1c89 | Alexander Graf | .help = "The first phandle ID we may generate dynamically",
|
610 | caedc737 | Alexander Graf | }, { |
611 | caedc737 | Alexander Graf | .name = "dt_compatible",
|
612 | caedc737 | Alexander Graf | .type = QEMU_OPT_STRING, |
613 | caedc737 | Alexander Graf | .help = "Overrides the \"compatible\" property of the dt root node",
|
614 | ddb97f1d | Jason Baron | }, { |
615 | ddb97f1d | Jason Baron | .name = "dump-guest-core",
|
616 | ddb97f1d | Jason Baron | .type = QEMU_OPT_BOOL, |
617 | ddb97f1d | Jason Baron | .help = "Include guest memory in a core dump",
|
618 | 8490fc78 | Luiz Capitulino | }, { |
619 | 8490fc78 | Luiz Capitulino | .name = "mem-merge",
|
620 | 8490fc78 | Luiz Capitulino | .type = QEMU_OPT_BOOL, |
621 | 8490fc78 | Luiz Capitulino | .help = "enable/disable memory merge support",
|
622 | 303d4e86 | Anthony PERARD | }, |
623 | 303d4e86 | Anthony PERARD | { /* End of list */ }
|
624 | 303d4e86 | Anthony PERARD | }, |
625 | 303d4e86 | Anthony PERARD | }; |
626 | 303d4e86 | Anthony PERARD | |
627 | 3d3b8303 | wayne | QemuOptsList qemu_boot_opts = { |
628 | 3d3b8303 | wayne | .name = "boot-opts",
|
629 | 3d3b8303 | wayne | .head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head), |
630 | 3d3b8303 | wayne | .desc = { |
631 | 3d3b8303 | wayne | /* the three names below are not used now */
|
632 | 3d3b8303 | wayne | { |
633 | 3d3b8303 | wayne | .name = "order",
|
634 | 3d3b8303 | wayne | .type = QEMU_OPT_STRING, |
635 | 3d3b8303 | wayne | }, { |
636 | 3d3b8303 | wayne | .name = "once",
|
637 | 3d3b8303 | wayne | .type = QEMU_OPT_STRING, |
638 | 3d3b8303 | wayne | }, { |
639 | 3d3b8303 | wayne | .name = "menu",
|
640 | 3d3b8303 | wayne | .type = QEMU_OPT_STRING, |
641 | 3d3b8303 | wayne | /* following are really used */
|
642 | 3d3b8303 | wayne | }, { |
643 | 3d3b8303 | wayne | .name = "splash",
|
644 | 3d3b8303 | wayne | .type = QEMU_OPT_STRING, |
645 | 3d3b8303 | wayne | }, { |
646 | 3d3b8303 | wayne | .name = "splash-time",
|
647 | 3d3b8303 | wayne | .type = QEMU_OPT_STRING, |
648 | ac05f349 | Amos Kong | }, { |
649 | ac05f349 | Amos Kong | .name = "reboot-timeout",
|
650 | ac05f349 | Amos Kong | .type = QEMU_OPT_STRING, |
651 | 3d3b8303 | wayne | }, |
652 | 3d3b8303 | wayne | { /*End of list */ }
|
653 | 3d3b8303 | wayne | }, |
654 | 3d3b8303 | wayne | }; |
655 | 3d3b8303 | wayne | |
656 | dfe795e7 | Gerd Hoffmann | static QemuOptsList *vm_config_groups[32] = { |
657 | d058fe03 | Gerd Hoffmann | &qemu_drive_opts, |
658 | 191bc01b | Gerd Hoffmann | &qemu_chardev_opts, |
659 | f31d07d1 | Gerd Hoffmann | &qemu_device_opts, |
660 | a1ea458f | Mark McLoughlin | &qemu_netdev_opts, |
661 | 8119b33d | Mark McLoughlin | &qemu_net_opts, |
662 | 5fdfbf7e | Jan Kiszka | &qemu_rtc_opts, |
663 | d0fef6fb | Gerd Hoffmann | &qemu_global_opts, |
664 | 88589343 | Gerd Hoffmann | &qemu_mon_opts, |
665 | b5ec5ce0 | john cooper | &qemu_cpudef_opts, |
666 | ab6540d5 | Prerna Saxena | &qemu_trace_opts, |
667 | 2e55e842 | Gleb Natapov | &qemu_option_rom_opts, |
668 | 303d4e86 | Anthony PERARD | &qemu_machine_opts, |
669 | 3d3b8303 | wayne | &qemu_boot_opts, |
670 | f9dadc98 | Ronnie Sahlberg | &qemu_iscsi_opts, |
671 | 7d76ad4f | Eduardo Otubo | &qemu_sandbox_opts, |
672 | d058fe03 | Gerd Hoffmann | NULL,
|
673 | d058fe03 | Gerd Hoffmann | }; |
674 | d058fe03 | Gerd Hoffmann | |
675 | 2ac20613 | Luiz Capitulino | static QemuOptsList *find_list(QemuOptsList **lists, const char *group, |
676 | 2ac20613 | Luiz Capitulino | Error **errp) |
677 | ddc97855 | Gerd Hoffmann | { |
678 | ddc97855 | Gerd Hoffmann | int i;
|
679 | ddc97855 | Gerd Hoffmann | |
680 | ddc97855 | Gerd Hoffmann | for (i = 0; lists[i] != NULL; i++) { |
681 | ddc97855 | Gerd Hoffmann | if (strcmp(lists[i]->name, group) == 0) |
682 | ddc97855 | Gerd Hoffmann | break;
|
683 | ddc97855 | Gerd Hoffmann | } |
684 | ddc97855 | Gerd Hoffmann | if (lists[i] == NULL) { |
685 | 2ac20613 | Luiz Capitulino | error_set(errp, QERR_INVALID_OPTION_GROUP, group); |
686 | ddc97855 | Gerd Hoffmann | } |
687 | ddc97855 | Gerd Hoffmann | return lists[i];
|
688 | ddc97855 | Gerd Hoffmann | } |
689 | ddc97855 | Gerd Hoffmann | |
690 | 490b648e | Kevin Wolf | QemuOptsList *qemu_find_opts(const char *group) |
691 | 490b648e | Kevin Wolf | { |
692 | 2ac20613 | Luiz Capitulino | QemuOptsList *ret; |
693 | 2ac20613 | Luiz Capitulino | Error *local_err = NULL;
|
694 | 2ac20613 | Luiz Capitulino | |
695 | 2ac20613 | Luiz Capitulino | ret = find_list(vm_config_groups, group, &local_err); |
696 | 2ac20613 | Luiz Capitulino | if (error_is_set(&local_err)) {
|
697 | 2ac20613 | Luiz Capitulino | error_report("%s\n", error_get_pretty(local_err));
|
698 | 2ac20613 | Luiz Capitulino | error_free(local_err); |
699 | 2ac20613 | Luiz Capitulino | } |
700 | 2ac20613 | Luiz Capitulino | |
701 | 2ac20613 | Luiz Capitulino | return ret;
|
702 | 490b648e | Kevin Wolf | } |
703 | 490b648e | Kevin Wolf | |
704 | 60d5666f | Luiz Capitulino | QemuOptsList *qemu_find_opts_err(const char *group, Error **errp) |
705 | 60d5666f | Luiz Capitulino | { |
706 | 60d5666f | Luiz Capitulino | return find_list(vm_config_groups, group, errp);
|
707 | 60d5666f | Luiz Capitulino | } |
708 | 60d5666f | Luiz Capitulino | |
709 | dfe795e7 | Gerd Hoffmann | void qemu_add_opts(QemuOptsList *list)
|
710 | dfe795e7 | Gerd Hoffmann | { |
711 | dfe795e7 | Gerd Hoffmann | int entries, i;
|
712 | dfe795e7 | Gerd Hoffmann | |
713 | dfe795e7 | Gerd Hoffmann | entries = ARRAY_SIZE(vm_config_groups); |
714 | dfe795e7 | Gerd Hoffmann | entries--; /* keep list NULL terminated */
|
715 | dfe795e7 | Gerd Hoffmann | for (i = 0; i < entries; i++) { |
716 | dfe795e7 | Gerd Hoffmann | if (vm_config_groups[i] == NULL) { |
717 | dfe795e7 | Gerd Hoffmann | vm_config_groups[i] = list; |
718 | dfe795e7 | Gerd Hoffmann | return;
|
719 | dfe795e7 | Gerd Hoffmann | } |
720 | dfe795e7 | Gerd Hoffmann | } |
721 | dfe795e7 | Gerd Hoffmann | fprintf(stderr, "ran out of space in vm_config_groups");
|
722 | dfe795e7 | Gerd Hoffmann | abort(); |
723 | dfe795e7 | Gerd Hoffmann | } |
724 | dfe795e7 | Gerd Hoffmann | |
725 | d058fe03 | Gerd Hoffmann | int qemu_set_option(const char *str) |
726 | d058fe03 | Gerd Hoffmann | { |
727 | d058fe03 | Gerd Hoffmann | char group[64], id[64], arg[64]; |
728 | ddc97855 | Gerd Hoffmann | QemuOptsList *list; |
729 | d058fe03 | Gerd Hoffmann | QemuOpts *opts; |
730 | ddc97855 | Gerd Hoffmann | int rc, offset;
|
731 | d058fe03 | Gerd Hoffmann | |
732 | d058fe03 | Gerd Hoffmann | rc = sscanf(str, "%63[^.].%63[^.].%63[^=]%n", group, id, arg, &offset);
|
733 | d058fe03 | Gerd Hoffmann | if (rc < 3 || str[offset] != '=') { |
734 | 1ecda02b | Markus Armbruster | error_report("can't parse: \"%s\"", str);
|
735 | d058fe03 | Gerd Hoffmann | return -1; |
736 | d058fe03 | Gerd Hoffmann | } |
737 | d058fe03 | Gerd Hoffmann | |
738 | 304329ee | Markus Armbruster | list = qemu_find_opts(group); |
739 | ddc97855 | Gerd Hoffmann | if (list == NULL) { |
740 | d058fe03 | Gerd Hoffmann | return -1; |
741 | d058fe03 | Gerd Hoffmann | } |
742 | d058fe03 | Gerd Hoffmann | |
743 | ddc97855 | Gerd Hoffmann | opts = qemu_opts_find(list, id); |
744 | d058fe03 | Gerd Hoffmann | if (!opts) {
|
745 | 1ecda02b | Markus Armbruster | error_report("there is no %s \"%s\" defined",
|
746 | 1ecda02b | Markus Armbruster | list->name, id); |
747 | d058fe03 | Gerd Hoffmann | return -1; |
748 | d058fe03 | Gerd Hoffmann | } |
749 | d058fe03 | Gerd Hoffmann | |
750 | 3df04ac3 | Mark McLoughlin | if (qemu_opt_set(opts, arg, str+offset+1) == -1) { |
751 | d058fe03 | Gerd Hoffmann | return -1; |
752 | d058fe03 | Gerd Hoffmann | } |
753 | d058fe03 | Gerd Hoffmann | return 0; |
754 | d058fe03 | Gerd Hoffmann | } |
755 | d058fe03 | Gerd Hoffmann | |
756 | d0fef6fb | Gerd Hoffmann | int qemu_global_option(const char *str) |
757 | d0fef6fb | Gerd Hoffmann | { |
758 | d0fef6fb | Gerd Hoffmann | char driver[64], property[64]; |
759 | d0fef6fb | Gerd Hoffmann | QemuOpts *opts; |
760 | d0fef6fb | Gerd Hoffmann | int rc, offset;
|
761 | d0fef6fb | Gerd Hoffmann | |
762 | d0fef6fb | Gerd Hoffmann | rc = sscanf(str, "%63[^.].%63[^=]%n", driver, property, &offset);
|
763 | d0fef6fb | Gerd Hoffmann | if (rc < 2 || str[offset] != '=') { |
764 | 1ecda02b | Markus Armbruster | error_report("can't parse: \"%s\"", str);
|
765 | d0fef6fb | Gerd Hoffmann | return -1; |
766 | d0fef6fb | Gerd Hoffmann | } |
767 | d0fef6fb | Gerd Hoffmann | |
768 | 8be7e7e4 | Luiz Capitulino | opts = qemu_opts_create(&qemu_global_opts, NULL, 0, NULL); |
769 | d0fef6fb | Gerd Hoffmann | qemu_opt_set(opts, "driver", driver);
|
770 | d0fef6fb | Gerd Hoffmann | qemu_opt_set(opts, "property", property);
|
771 | d0fef6fb | Gerd Hoffmann | qemu_opt_set(opts, "value", str+offset+1); |
772 | d0fef6fb | Gerd Hoffmann | return 0; |
773 | d0fef6fb | Gerd Hoffmann | } |
774 | d0fef6fb | Gerd Hoffmann | |
775 | 9d993394 | Gerd Hoffmann | struct ConfigWriteData {
|
776 | 9d993394 | Gerd Hoffmann | QemuOptsList *list; |
777 | 9d993394 | Gerd Hoffmann | FILE *fp; |
778 | 9d993394 | Gerd Hoffmann | }; |
779 | 9d993394 | Gerd Hoffmann | |
780 | 9d993394 | Gerd Hoffmann | static int config_write_opt(const char *name, const char *value, void *opaque) |
781 | 9d993394 | Gerd Hoffmann | { |
782 | 9d993394 | Gerd Hoffmann | struct ConfigWriteData *data = opaque;
|
783 | 9d993394 | Gerd Hoffmann | |
784 | 9d993394 | Gerd Hoffmann | fprintf(data->fp, " %s = \"%s\"\n", name, value);
|
785 | 9d993394 | Gerd Hoffmann | return 0; |
786 | 9d993394 | Gerd Hoffmann | } |
787 | 9d993394 | Gerd Hoffmann | |
788 | 9d993394 | Gerd Hoffmann | static int config_write_opts(QemuOpts *opts, void *opaque) |
789 | 9d993394 | Gerd Hoffmann | { |
790 | 9d993394 | Gerd Hoffmann | struct ConfigWriteData *data = opaque;
|
791 | 9d993394 | Gerd Hoffmann | const char *id = qemu_opts_id(opts); |
792 | 9d993394 | Gerd Hoffmann | |
793 | 9d993394 | Gerd Hoffmann | if (id) {
|
794 | 9d993394 | Gerd Hoffmann | fprintf(data->fp, "[%s \"%s\"]\n", data->list->name, id);
|
795 | 9d993394 | Gerd Hoffmann | } else {
|
796 | 9d993394 | Gerd Hoffmann | fprintf(data->fp, "[%s]\n", data->list->name);
|
797 | 9d993394 | Gerd Hoffmann | } |
798 | 9d993394 | Gerd Hoffmann | qemu_opt_foreach(opts, config_write_opt, data, 0);
|
799 | 9d993394 | Gerd Hoffmann | fprintf(data->fp, "\n");
|
800 | 9d993394 | Gerd Hoffmann | return 0; |
801 | 9d993394 | Gerd Hoffmann | } |
802 | 9d993394 | Gerd Hoffmann | |
803 | 9d993394 | Gerd Hoffmann | void qemu_config_write(FILE *fp)
|
804 | 9d993394 | Gerd Hoffmann | { |
805 | 9d993394 | Gerd Hoffmann | struct ConfigWriteData data = { .fp = fp };
|
806 | 490b648e | Kevin Wolf | QemuOptsList **lists = vm_config_groups; |
807 | 9d993394 | Gerd Hoffmann | int i;
|
808 | 9d993394 | Gerd Hoffmann | |
809 | 9d993394 | Gerd Hoffmann | fprintf(fp, "# qemu config file\n\n");
|
810 | 9d993394 | Gerd Hoffmann | for (i = 0; lists[i] != NULL; i++) { |
811 | 9d993394 | Gerd Hoffmann | data.list = lists[i]; |
812 | 9d993394 | Gerd Hoffmann | qemu_opts_foreach(data.list, config_write_opts, &data, 0);
|
813 | 9d993394 | Gerd Hoffmann | } |
814 | 9d993394 | Gerd Hoffmann | } |
815 | 42262ba8 | Gerd Hoffmann | |
816 | 490b648e | Kevin Wolf | int qemu_config_parse(FILE *fp, QemuOptsList **lists, const char *fname) |
817 | 42262ba8 | Gerd Hoffmann | { |
818 | 42262ba8 | Gerd Hoffmann | char line[1024], group[64], id[64], arg[64], value[1024]; |
819 | cf5a65aa | Markus Armbruster | Location loc; |
820 | 42262ba8 | Gerd Hoffmann | QemuOptsList *list = NULL;
|
821 | 2ac20613 | Luiz Capitulino | Error *local_err = NULL;
|
822 | 42262ba8 | Gerd Hoffmann | QemuOpts *opts = NULL;
|
823 | cf5a65aa | Markus Armbruster | int res = -1, lno = 0; |
824 | 42262ba8 | Gerd Hoffmann | |
825 | cf5a65aa | Markus Armbruster | loc_push_none(&loc); |
826 | 42262ba8 | Gerd Hoffmann | while (fgets(line, sizeof(line), fp) != NULL) { |
827 | cf5a65aa | Markus Armbruster | loc_set_file(fname, ++lno); |
828 | 42262ba8 | Gerd Hoffmann | if (line[0] == '\n') { |
829 | 42262ba8 | Gerd Hoffmann | /* skip empty lines */
|
830 | 42262ba8 | Gerd Hoffmann | continue;
|
831 | 42262ba8 | Gerd Hoffmann | } |
832 | 42262ba8 | Gerd Hoffmann | if (line[0] == '#') { |
833 | 42262ba8 | Gerd Hoffmann | /* comment */
|
834 | 42262ba8 | Gerd Hoffmann | continue;
|
835 | 42262ba8 | Gerd Hoffmann | } |
836 | 42262ba8 | Gerd Hoffmann | if (sscanf(line, "[%63s \"%63[^\"]\"]", group, id) == 2) { |
837 | 42262ba8 | Gerd Hoffmann | /* group with id */
|
838 | 2ac20613 | Luiz Capitulino | list = find_list(lists, group, &local_err); |
839 | 2ac20613 | Luiz Capitulino | if (error_is_set(&local_err)) {
|
840 | 2ac20613 | Luiz Capitulino | error_report("%s\n", error_get_pretty(local_err));
|
841 | 2ac20613 | Luiz Capitulino | error_free(local_err); |
842 | cf5a65aa | Markus Armbruster | goto out;
|
843 | 2ac20613 | Luiz Capitulino | } |
844 | 8be7e7e4 | Luiz Capitulino | opts = qemu_opts_create(list, id, 1, NULL); |
845 | 42262ba8 | Gerd Hoffmann | continue;
|
846 | 42262ba8 | Gerd Hoffmann | } |
847 | 42262ba8 | Gerd Hoffmann | if (sscanf(line, "[%63[^]]]", group) == 1) { |
848 | 42262ba8 | Gerd Hoffmann | /* group without id */
|
849 | 2ac20613 | Luiz Capitulino | list = find_list(lists, group, &local_err); |
850 | 2ac20613 | Luiz Capitulino | if (error_is_set(&local_err)) {
|
851 | 2ac20613 | Luiz Capitulino | error_report("%s\n", error_get_pretty(local_err));
|
852 | 2ac20613 | Luiz Capitulino | error_free(local_err); |
853 | cf5a65aa | Markus Armbruster | goto out;
|
854 | 2ac20613 | Luiz Capitulino | } |
855 | 8be7e7e4 | Luiz Capitulino | opts = qemu_opts_create(list, NULL, 0, NULL); |
856 | 42262ba8 | Gerd Hoffmann | continue;
|
857 | 42262ba8 | Gerd Hoffmann | } |
858 | 42262ba8 | Gerd Hoffmann | if (sscanf(line, " %63s = \"%1023[^\"]\"", arg, value) == 2) { |
859 | 42262ba8 | Gerd Hoffmann | /* arg = value */
|
860 | 42262ba8 | Gerd Hoffmann | if (opts == NULL) { |
861 | cf5a65aa | Markus Armbruster | error_report("no group defined");
|
862 | cf5a65aa | Markus Armbruster | goto out;
|
863 | 42262ba8 | Gerd Hoffmann | } |
864 | 42262ba8 | Gerd Hoffmann | if (qemu_opt_set(opts, arg, value) != 0) { |
865 | cf5a65aa | Markus Armbruster | goto out;
|
866 | 42262ba8 | Gerd Hoffmann | } |
867 | 42262ba8 | Gerd Hoffmann | continue;
|
868 | 42262ba8 | Gerd Hoffmann | } |
869 | cf5a65aa | Markus Armbruster | error_report("parse error");
|
870 | cf5a65aa | Markus Armbruster | goto out;
|
871 | 42262ba8 | Gerd Hoffmann | } |
872 | ef82516d | Markus Armbruster | if (ferror(fp)) {
|
873 | ef82516d | Markus Armbruster | error_report("error reading file");
|
874 | ef82516d | Markus Armbruster | goto out;
|
875 | ef82516d | Markus Armbruster | } |
876 | cf5a65aa | Markus Armbruster | res = 0;
|
877 | cf5a65aa | Markus Armbruster | out:
|
878 | cf5a65aa | Markus Armbruster | loc_pop(&loc); |
879 | cf5a65aa | Markus Armbruster | return res;
|
880 | 42262ba8 | Gerd Hoffmann | } |
881 | dcfb0939 | Kevin Wolf | |
882 | dcfb0939 | Kevin Wolf | int qemu_read_config_file(const char *filename) |
883 | dcfb0939 | Kevin Wolf | { |
884 | dcfb0939 | Kevin Wolf | FILE *f = fopen(filename, "r");
|
885 | 019e78ba | Kevin Wolf | int ret;
|
886 | 019e78ba | Kevin Wolf | |
887 | dcfb0939 | Kevin Wolf | if (f == NULL) { |
888 | dcfb0939 | Kevin Wolf | return -errno;
|
889 | dcfb0939 | Kevin Wolf | } |
890 | dcfb0939 | Kevin Wolf | |
891 | 019e78ba | Kevin Wolf | ret = qemu_config_parse(f, vm_config_groups, filename); |
892 | dcfb0939 | Kevin Wolf | fclose(f); |
893 | dcfb0939 | Kevin Wolf | |
894 | 019e78ba | Kevin Wolf | if (ret == 0) { |
895 | 019e78ba | Kevin Wolf | return 0; |
896 | 019e78ba | Kevin Wolf | } else {
|
897 | 019e78ba | Kevin Wolf | return -EINVAL;
|
898 | 019e78ba | Kevin Wolf | } |
899 | dcfb0939 | Kevin Wolf | } |