1 /* THIS FILE IS AUTOMATICALLY GENERATED, DO NOT MODIFY */ 2 3 /* 4 * schema-defined QMP->QAPI command dispatch 5 * 6 * Copyright IBM, Corp. 2011 7 * 8 * Authors: 9 * Anthony Liguori <aliguori (at) us.ibm.com> 10 * 11 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 12 * See the COPYING.LIB file in the top-level directory. 13 * 14 */ 15 16 #include "qemu-common.h" 17 #include "qemu/module.h" 18 #include "qapi/qmp/qerror.h" 19 #include "qapi/qmp/types.h" 20 #include "qapi/qmp/dispatch.h" 21 #include "qapi/visitor.h" 22 #include "qapi/qmp-output-visitor.h" 23 #include "qapi/qmp-input-visitor.h" 24 #include "qapi/dealloc-visitor.h" 25 #include "qapi-types.h" 26 #include "qapi-visit.h" 27 28 #include "qmp-commands.h" 29 30 int qmp_marshal_input_add_client(Monitor *mon, const QDict *qdict, QObject **ret) 31 { 32 Error *local_err = NULL; 33 Error **errp = &local_err; 34 QDict *args = (QDict *)qdict; 35 QmpInputVisitor *mi; 36 QapiDeallocVisitor *md; 37 Visitor *v; 38 char * protocol = NULL; 39 char * fdname = NULL; 40 bool has_skipauth = false; 41 bool skipauth; 42 bool has_tls = false; 43 bool tls; 44 45 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 46 v = qmp_input_get_visitor(mi); 47 visit_type_str(v, &protocol, "protocol", errp); 48 visit_type_str(v, &fdname, "fdname", errp); 49 visit_start_optional(v, &has_skipauth, "skipauth", errp); 50 if (has_skipauth) { 51 visit_type_bool(v, &skipauth, "skipauth", errp); 52 } 53 visit_end_optional(v, errp); 54 visit_start_optional(v, &has_tls, "tls", errp); 55 if (has_tls) { 56 visit_type_bool(v, &tls, "tls", errp); 57 } 58 visit_end_optional(v, errp); 59 qmp_input_visitor_cleanup(mi); 60 61 if (error_is_set(errp)) { 62 goto out; 63 } 64 qmp_add_client(protocol, fdname, has_skipauth, skipauth, has_tls, tls, errp); 65 66 out: 67 md = qapi_dealloc_visitor_new(); 68 v = qapi_dealloc_get_visitor(md); 69 visit_type_str(v, &protocol, "protocol", NULL); 70 visit_type_str(v, &fdname, "fdname", NULL); 71 visit_start_optional(v, &has_skipauth, "skipauth", NULL); 72 if (has_skipauth) { 73 visit_type_bool(v, &skipauth, "skipauth", NULL); 74 } 75 visit_end_optional(v, NULL); 76 visit_start_optional(v, &has_tls, "tls", NULL); 77 if (has_tls) { 78 visit_type_bool(v, &tls, "tls", NULL); 79 } 80 visit_end_optional(v, NULL); 81 qapi_dealloc_visitor_cleanup(md); 82 83 if (local_err) { 84 qerror_report_err(local_err); 85 error_free(local_err); 86 return -1; 87 } 88 return 0; 89 } 90 91 static void qmp_marshal_output_query_name(NameInfo * ret_in, QObject **ret_out, Error **errp) 92 { 93 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 94 QmpOutputVisitor *mo = qmp_output_visitor_new(); 95 Visitor *v; 96 97 v = qmp_output_get_visitor(mo); 98 visit_type_NameInfo(v, &ret_in, "unused", errp); 99 if (!error_is_set(errp)) { 100 *ret_out = qmp_output_get_qobject(mo); 101 } 102 qmp_output_visitor_cleanup(mo); 103 v = qapi_dealloc_get_visitor(md); 104 visit_type_NameInfo(v, &ret_in, "unused", NULL); 105 qapi_dealloc_visitor_cleanup(md); 106 } 107 108 int qmp_marshal_input_query_name(Monitor *mon, const QDict *qdict, QObject **ret) 109 { 110 Error *local_err = NULL; 111 Error **errp = &local_err; 112 QDict *args = (QDict *)qdict; 113 NameInfo * retval = NULL; 114 (void)args; 115 if (error_is_set(errp)) { 116 goto out; 117 } 118 retval = qmp_query_name(errp); 119 if (!error_is_set(errp)) { 120 qmp_marshal_output_query_name(retval, ret, errp); 121 } 122 123 out: 124 125 126 if (local_err) { 127 qerror_report_err(local_err); 128 error_free(local_err); 129 return -1; 130 } 131 return 0; 132 } 133 134 static void qmp_marshal_output_query_version(VersionInfo * ret_in, QObject **ret_out, Error **errp) 135 { 136 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 137 QmpOutputVisitor *mo = qmp_output_visitor_new(); 138 Visitor *v; 139 140 v = qmp_output_get_visitor(mo); 141 visit_type_VersionInfo(v, &ret_in, "unused", errp); 142 if (!error_is_set(errp)) { 143 *ret_out = qmp_output_get_qobject(mo); 144 } 145 qmp_output_visitor_cleanup(mo); 146 v = qapi_dealloc_get_visitor(md); 147 visit_type_VersionInfo(v, &ret_in, "unused", NULL); 148 qapi_dealloc_visitor_cleanup(md); 149 } 150 151 int qmp_marshal_input_query_version(Monitor *mon, const QDict *qdict, QObject **ret) 152 { 153 Error *local_err = NULL; 154 Error **errp = &local_err; 155 QDict *args = (QDict *)qdict; 156 VersionInfo * retval = NULL; 157 (void)args; 158 if (error_is_set(errp)) { 159 goto out; 160 } 161 retval = qmp_query_version(errp); 162 if (!error_is_set(errp)) { 163 qmp_marshal_output_query_version(retval, ret, errp); 164 } 165 166 out: 167 168 169 if (local_err) { 170 qerror_report_err(local_err); 171 error_free(local_err); 172 return -1; 173 } 174 return 0; 175 } 176 177 static void qmp_marshal_output_query_kvm(KvmInfo * ret_in, QObject **ret_out, Error **errp) 178 { 179 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 180 QmpOutputVisitor *mo = qmp_output_visitor_new(); 181 Visitor *v; 182 183 v = qmp_output_get_visitor(mo); 184 visit_type_KvmInfo(v, &ret_in, "unused", errp); 185 if (!error_is_set(errp)) { 186 *ret_out = qmp_output_get_qobject(mo); 187 } 188 qmp_output_visitor_cleanup(mo); 189 v = qapi_dealloc_get_visitor(md); 190 visit_type_KvmInfo(v, &ret_in, "unused", NULL); 191 qapi_dealloc_visitor_cleanup(md); 192 } 193 194 int qmp_marshal_input_query_kvm(Monitor *mon, const QDict *qdict, QObject **ret) 195 { 196 Error *local_err = NULL; 197 Error **errp = &local_err; 198 QDict *args = (QDict *)qdict; 199 KvmInfo * retval = NULL; 200 (void)args; 201 if (error_is_set(errp)) { 202 goto out; 203 } 204 retval = qmp_query_kvm(errp); 205 if (!error_is_set(errp)) { 206 qmp_marshal_output_query_kvm(retval, ret, errp); 207 } 208 209 out: 210 211 212 if (local_err) { 213 qerror_report_err(local_err); 214 error_free(local_err); 215 return -1; 216 } 217 return 0; 218 } 219 220 static void qmp_marshal_output_query_status(StatusInfo * ret_in, QObject **ret_out, Error **errp) 221 { 222 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 223 QmpOutputVisitor *mo = qmp_output_visitor_new(); 224 Visitor *v; 225 226 v = qmp_output_get_visitor(mo); 227 visit_type_StatusInfo(v, &ret_in, "unused", errp); 228 if (!error_is_set(errp)) { 229 *ret_out = qmp_output_get_qobject(mo); 230 } 231 qmp_output_visitor_cleanup(mo); 232 v = qapi_dealloc_get_visitor(md); 233 visit_type_StatusInfo(v, &ret_in, "unused", NULL); 234 qapi_dealloc_visitor_cleanup(md); 235 } 236 237 int qmp_marshal_input_query_status(Monitor *mon, const QDict *qdict, QObject **ret) 238 { 239 Error *local_err = NULL; 240 Error **errp = &local_err; 241 QDict *args = (QDict *)qdict; 242 StatusInfo * retval = NULL; 243 (void)args; 244 if (error_is_set(errp)) { 245 goto out; 246 } 247 retval = qmp_query_status(errp); 248 if (!error_is_set(errp)) { 249 qmp_marshal_output_query_status(retval, ret, errp); 250 } 251 252 out: 253 254 255 if (local_err) { 256 qerror_report_err(local_err); 257 error_free(local_err); 258 return -1; 259 } 260 return 0; 261 } 262 263 static void qmp_marshal_output_query_uuid(UuidInfo * ret_in, QObject **ret_out, Error **errp) 264 { 265 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 266 QmpOutputVisitor *mo = qmp_output_visitor_new(); 267 Visitor *v; 268 269 v = qmp_output_get_visitor(mo); 270 visit_type_UuidInfo(v, &ret_in, "unused", errp); 271 if (!error_is_set(errp)) { 272 *ret_out = qmp_output_get_qobject(mo); 273 } 274 qmp_output_visitor_cleanup(mo); 275 v = qapi_dealloc_get_visitor(md); 276 visit_type_UuidInfo(v, &ret_in, "unused", NULL); 277 qapi_dealloc_visitor_cleanup(md); 278 } 279 280 int qmp_marshal_input_query_uuid(Monitor *mon, const QDict *qdict, QObject **ret) 281 { 282 Error *local_err = NULL; 283 Error **errp = &local_err; 284 QDict *args = (QDict *)qdict; 285 UuidInfo * retval = NULL; 286 (void)args; 287 if (error_is_set(errp)) { 288 goto out; 289 } 290 retval = qmp_query_uuid(errp); 291 if (!error_is_set(errp)) { 292 qmp_marshal_output_query_uuid(retval, ret, errp); 293 } 294 295 out: 296 297 298 if (local_err) { 299 qerror_report_err(local_err); 300 error_free(local_err); 301 return -1; 302 } 303 return 0; 304 } 305 306 static void qmp_marshal_output_query_chardev(ChardevInfoList * ret_in, QObject **ret_out, Error **errp) 307 { 308 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 309 QmpOutputVisitor *mo = qmp_output_visitor_new(); 310 Visitor *v; 311 312 v = qmp_output_get_visitor(mo); 313 visit_type_ChardevInfoList(v, &ret_in, "unused", errp); 314 if (!error_is_set(errp)) { 315 *ret_out = qmp_output_get_qobject(mo); 316 } 317 qmp_output_visitor_cleanup(mo); 318 v = qapi_dealloc_get_visitor(md); 319 visit_type_ChardevInfoList(v, &ret_in, "unused", NULL); 320 qapi_dealloc_visitor_cleanup(md); 321 } 322 323 int qmp_marshal_input_query_chardev(Monitor *mon, const QDict *qdict, QObject **ret) 324 { 325 Error *local_err = NULL; 326 Error **errp = &local_err; 327 QDict *args = (QDict *)qdict; 328 ChardevInfoList * retval = NULL; 329 (void)args; 330 if (error_is_set(errp)) { 331 goto out; 332 } 333 retval = qmp_query_chardev(errp); 334 if (!error_is_set(errp)) { 335 qmp_marshal_output_query_chardev(retval, ret, errp); 336 } 337 338 out: 339 340 341 if (local_err) { 342 qerror_report_err(local_err); 343 error_free(local_err); 344 return -1; 345 } 346 return 0; 347 } 348 349 int qmp_marshal_input_ringbuf_write(Monitor *mon, const QDict *qdict, QObject **ret) 350 { 351 Error *local_err = NULL; 352 Error **errp = &local_err; 353 QDict *args = (QDict *)qdict; 354 QmpInputVisitor *mi; 355 QapiDeallocVisitor *md; 356 Visitor *v; 357 char * device = NULL; 358 char * data = NULL; 359 bool has_format = false; 360 DataFormat format; 361 362 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 363 v = qmp_input_get_visitor(mi); 364 visit_type_str(v, &device, "device", errp); 365 visit_type_str(v, &data, "data", errp); 366 visit_start_optional(v, &has_format, "format", errp); 367 if (has_format) { 368 visit_type_DataFormat(v, &format, "format", errp); 369 } 370 visit_end_optional(v, errp); 371 qmp_input_visitor_cleanup(mi); 372 373 if (error_is_set(errp)) { 374 goto out; 375 } 376 qmp_ringbuf_write(device, data, has_format, format, errp); 377 378 out: 379 md = qapi_dealloc_visitor_new(); 380 v = qapi_dealloc_get_visitor(md); 381 visit_type_str(v, &device, "device", NULL); 382 visit_type_str(v, &data, "data", NULL); 383 visit_start_optional(v, &has_format, "format", NULL); 384 if (has_format) { 385 visit_type_DataFormat(v, &format, "format", NULL); 386 } 387 visit_end_optional(v, NULL); 388 qapi_dealloc_visitor_cleanup(md); 389 390 if (local_err) { 391 qerror_report_err(local_err); 392 error_free(local_err); 393 return -1; 394 } 395 return 0; 396 } 397 398 static void qmp_marshal_output_ringbuf_read(char * ret_in, QObject **ret_out, Error **errp) 399 { 400 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 401 QmpOutputVisitor *mo = qmp_output_visitor_new(); 402 Visitor *v; 403 404 v = qmp_output_get_visitor(mo); 405 visit_type_str(v, &ret_in, "unused", errp); 406 if (!error_is_set(errp)) { 407 *ret_out = qmp_output_get_qobject(mo); 408 } 409 qmp_output_visitor_cleanup(mo); 410 v = qapi_dealloc_get_visitor(md); 411 visit_type_str(v, &ret_in, "unused", NULL); 412 qapi_dealloc_visitor_cleanup(md); 413 } 414 415 int qmp_marshal_input_ringbuf_read(Monitor *mon, const QDict *qdict, QObject **ret) 416 { 417 Error *local_err = NULL; 418 Error **errp = &local_err; 419 QDict *args = (QDict *)qdict; 420 char * retval = NULL; 421 QmpInputVisitor *mi; 422 QapiDeallocVisitor *md; 423 Visitor *v; 424 char * device = NULL; 425 int64_t size; 426 bool has_format = false; 427 DataFormat format; 428 429 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 430 v = qmp_input_get_visitor(mi); 431 visit_type_str(v, &device, "device", errp); 432 visit_type_int(v, &size, "size", errp); 433 visit_start_optional(v, &has_format, "format", errp); 434 if (has_format) { 435 visit_type_DataFormat(v, &format, "format", errp); 436 } 437 visit_end_optional(v, errp); 438 qmp_input_visitor_cleanup(mi); 439 440 if (error_is_set(errp)) { 441 goto out; 442 } 443 retval = qmp_ringbuf_read(device, size, has_format, format, errp); 444 if (!error_is_set(errp)) { 445 qmp_marshal_output_ringbuf_read(retval, ret, errp); 446 } 447 448 out: 449 md = qapi_dealloc_visitor_new(); 450 v = qapi_dealloc_get_visitor(md); 451 visit_type_str(v, &device, "device", NULL); 452 visit_type_int(v, &size, "size", NULL); 453 visit_start_optional(v, &has_format, "format", NULL); 454 if (has_format) { 455 visit_type_DataFormat(v, &format, "format", NULL); 456 } 457 visit_end_optional(v, NULL); 458 qapi_dealloc_visitor_cleanup(md); 459 460 if (local_err) { 461 qerror_report_err(local_err); 462 error_free(local_err); 463 return -1; 464 } 465 return 0; 466 } 467 468 static void qmp_marshal_output_query_commands(CommandInfoList * ret_in, QObject **ret_out, Error **errp) 469 { 470 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 471 QmpOutputVisitor *mo = qmp_output_visitor_new(); 472 Visitor *v; 473 474 v = qmp_output_get_visitor(mo); 475 visit_type_CommandInfoList(v, &ret_in, "unused", errp); 476 if (!error_is_set(errp)) { 477 *ret_out = qmp_output_get_qobject(mo); 478 } 479 qmp_output_visitor_cleanup(mo); 480 v = qapi_dealloc_get_visitor(md); 481 visit_type_CommandInfoList(v, &ret_in, "unused", NULL); 482 qapi_dealloc_visitor_cleanup(md); 483 } 484 485 int qmp_marshal_input_query_commands(Monitor *mon, const QDict *qdict, QObject **ret) 486 { 487 Error *local_err = NULL; 488 Error **errp = &local_err; 489 QDict *args = (QDict *)qdict; 490 CommandInfoList * retval = NULL; 491 (void)args; 492 if (error_is_set(errp)) { 493 goto out; 494 } 495 retval = qmp_query_commands(errp); 496 if (!error_is_set(errp)) { 497 qmp_marshal_output_query_commands(retval, ret, errp); 498 } 499 500 out: 501 502 503 if (local_err) { 504 qerror_report_err(local_err); 505 error_free(local_err); 506 return -1; 507 } 508 return 0; 509 } 510 511 static void qmp_marshal_output_query_events(EventInfoList * ret_in, QObject **ret_out, Error **errp) 512 { 513 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 514 QmpOutputVisitor *mo = qmp_output_visitor_new(); 515 Visitor *v; 516 517 v = qmp_output_get_visitor(mo); 518 visit_type_EventInfoList(v, &ret_in, "unused", errp); 519 if (!error_is_set(errp)) { 520 *ret_out = qmp_output_get_qobject(mo); 521 } 522 qmp_output_visitor_cleanup(mo); 523 v = qapi_dealloc_get_visitor(md); 524 visit_type_EventInfoList(v, &ret_in, "unused", NULL); 525 qapi_dealloc_visitor_cleanup(md); 526 } 527 528 int qmp_marshal_input_query_events(Monitor *mon, const QDict *qdict, QObject **ret) 529 { 530 Error *local_err = NULL; 531 Error **errp = &local_err; 532 QDict *args = (QDict *)qdict; 533 EventInfoList * retval = NULL; 534 (void)args; 535 if (error_is_set(errp)) { 536 goto out; 537 } 538 retval = qmp_query_events(errp); 539 if (!error_is_set(errp)) { 540 qmp_marshal_output_query_events(retval, ret, errp); 541 } 542 543 out: 544 545 546 if (local_err) { 547 qerror_report_err(local_err); 548 error_free(local_err); 549 return -1; 550 } 551 return 0; 552 } 553 554 static void qmp_marshal_output_query_migrate(MigrationInfo * ret_in, QObject **ret_out, Error **errp) 555 { 556 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 557 QmpOutputVisitor *mo = qmp_output_visitor_new(); 558 Visitor *v; 559 560 v = qmp_output_get_visitor(mo); 561 visit_type_MigrationInfo(v, &ret_in, "unused", errp); 562 if (!error_is_set(errp)) { 563 *ret_out = qmp_output_get_qobject(mo); 564 } 565 qmp_output_visitor_cleanup(mo); 566 v = qapi_dealloc_get_visitor(md); 567 visit_type_MigrationInfo(v, &ret_in, "unused", NULL); 568 qapi_dealloc_visitor_cleanup(md); 569 } 570 571 int qmp_marshal_input_query_migrate(Monitor *mon, const QDict *qdict, QObject **ret) 572 { 573 Error *local_err = NULL; 574 Error **errp = &local_err; 575 QDict *args = (QDict *)qdict; 576 MigrationInfo * retval = NULL; 577 (void)args; 578 if (error_is_set(errp)) { 579 goto out; 580 } 581 retval = qmp_query_migrate(errp); 582 if (!error_is_set(errp)) { 583 qmp_marshal_output_query_migrate(retval, ret, errp); 584 } 585 586 out: 587 588 589 if (local_err) { 590 qerror_report_err(local_err); 591 error_free(local_err); 592 return -1; 593 } 594 return 0; 595 } 596 597 int qmp_marshal_input_migrate_set_capabilities(Monitor *mon, const QDict *qdict, QObject **ret) 598 { 599 Error *local_err = NULL; 600 Error **errp = &local_err; 601 QDict *args = (QDict *)qdict; 602 QmpInputVisitor *mi; 603 QapiDeallocVisitor *md; 604 Visitor *v; 605 MigrationCapabilityStatusList * capabilities = NULL; 606 607 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 608 v = qmp_input_get_visitor(mi); 609 visit_type_MigrationCapabilityStatusList(v, &capabilities, "capabilities", errp); 610 qmp_input_visitor_cleanup(mi); 611 612 if (error_is_set(errp)) { 613 goto out; 614 } 615 qmp_migrate_set_capabilities(capabilities, errp); 616 617 out: 618 md = qapi_dealloc_visitor_new(); 619 v = qapi_dealloc_get_visitor(md); 620 visit_type_MigrationCapabilityStatusList(v, &capabilities, "capabilities", NULL); 621 qapi_dealloc_visitor_cleanup(md); 622 623 if (local_err) { 624 qerror_report_err(local_err); 625 error_free(local_err); 626 return -1; 627 } 628 return 0; 629 } 630 631 static void qmp_marshal_output_query_migrate_capabilities(MigrationCapabilityStatusList * ret_in, QObject **ret_out, Error **errp) 632 { 633 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 634 QmpOutputVisitor *mo = qmp_output_visitor_new(); 635 Visitor *v; 636 637 v = qmp_output_get_visitor(mo); 638 visit_type_MigrationCapabilityStatusList(v, &ret_in, "unused", errp); 639 if (!error_is_set(errp)) { 640 *ret_out = qmp_output_get_qobject(mo); 641 } 642 qmp_output_visitor_cleanup(mo); 643 v = qapi_dealloc_get_visitor(md); 644 visit_type_MigrationCapabilityStatusList(v, &ret_in, "unused", NULL); 645 qapi_dealloc_visitor_cleanup(md); 646 } 647 648 int qmp_marshal_input_query_migrate_capabilities(Monitor *mon, const QDict *qdict, QObject **ret) 649 { 650 Error *local_err = NULL; 651 Error **errp = &local_err; 652 QDict *args = (QDict *)qdict; 653 MigrationCapabilityStatusList * retval = NULL; 654 (void)args; 655 if (error_is_set(errp)) { 656 goto out; 657 } 658 retval = qmp_query_migrate_capabilities(errp); 659 if (!error_is_set(errp)) { 660 qmp_marshal_output_query_migrate_capabilities(retval, ret, errp); 661 } 662 663 out: 664 665 666 if (local_err) { 667 qerror_report_err(local_err); 668 error_free(local_err); 669 return -1; 670 } 671 return 0; 672 } 673 674 static void qmp_marshal_output_query_mice(MouseInfoList * ret_in, QObject **ret_out, Error **errp) 675 { 676 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 677 QmpOutputVisitor *mo = qmp_output_visitor_new(); 678 Visitor *v; 679 680 v = qmp_output_get_visitor(mo); 681 visit_type_MouseInfoList(v, &ret_in, "unused", errp); 682 if (!error_is_set(errp)) { 683 *ret_out = qmp_output_get_qobject(mo); 684 } 685 qmp_output_visitor_cleanup(mo); 686 v = qapi_dealloc_get_visitor(md); 687 visit_type_MouseInfoList(v, &ret_in, "unused", NULL); 688 qapi_dealloc_visitor_cleanup(md); 689 } 690 691 int qmp_marshal_input_query_mice(Monitor *mon, const QDict *qdict, QObject **ret) 692 { 693 Error *local_err = NULL; 694 Error **errp = &local_err; 695 QDict *args = (QDict *)qdict; 696 MouseInfoList * retval = NULL; 697 (void)args; 698 if (error_is_set(errp)) { 699 goto out; 700 } 701 retval = qmp_query_mice(errp); 702 if (!error_is_set(errp)) { 703 qmp_marshal_output_query_mice(retval, ret, errp); 704 } 705 706 out: 707 708 709 if (local_err) { 710 qerror_report_err(local_err); 711 error_free(local_err); 712 return -1; 713 } 714 return 0; 715 } 716 717 static void qmp_marshal_output_query_cpus(CpuInfoList * ret_in, QObject **ret_out, Error **errp) 718 { 719 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 720 QmpOutputVisitor *mo = qmp_output_visitor_new(); 721 Visitor *v; 722 723 v = qmp_output_get_visitor(mo); 724 visit_type_CpuInfoList(v, &ret_in, "unused", errp); 725 if (!error_is_set(errp)) { 726 *ret_out = qmp_output_get_qobject(mo); 727 } 728 qmp_output_visitor_cleanup(mo); 729 v = qapi_dealloc_get_visitor(md); 730 visit_type_CpuInfoList(v, &ret_in, "unused", NULL); 731 qapi_dealloc_visitor_cleanup(md); 732 } 733 734 int qmp_marshal_input_query_cpus(Monitor *mon, const QDict *qdict, QObject **ret) 735 { 736 Error *local_err = NULL; 737 Error **errp = &local_err; 738 QDict *args = (QDict *)qdict; 739 CpuInfoList * retval = NULL; 740 (void)args; 741 if (error_is_set(errp)) { 742 goto out; 743 } 744 retval = qmp_query_cpus(errp); 745 if (!error_is_set(errp)) { 746 qmp_marshal_output_query_cpus(retval, ret, errp); 747 } 748 749 out: 750 751 752 if (local_err) { 753 qerror_report_err(local_err); 754 error_free(local_err); 755 return -1; 756 } 757 return 0; 758 } 759 760 static void qmp_marshal_output_query_block(BlockInfoList * ret_in, QObject **ret_out, Error **errp) 761 { 762 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 763 QmpOutputVisitor *mo = qmp_output_visitor_new(); 764 Visitor *v; 765 766 v = qmp_output_get_visitor(mo); 767 visit_type_BlockInfoList(v, &ret_in, "unused", errp); 768 if (!error_is_set(errp)) { 769 *ret_out = qmp_output_get_qobject(mo); 770 } 771 qmp_output_visitor_cleanup(mo); 772 v = qapi_dealloc_get_visitor(md); 773 visit_type_BlockInfoList(v, &ret_in, "unused", NULL); 774 qapi_dealloc_visitor_cleanup(md); 775 } 776 777 int qmp_marshal_input_query_block(Monitor *mon, const QDict *qdict, QObject **ret) 778 { 779 Error *local_err = NULL; 780 Error **errp = &local_err; 781 QDict *args = (QDict *)qdict; 782 BlockInfoList * retval = NULL; 783 (void)args; 784 if (error_is_set(errp)) { 785 goto out; 786 } 787 retval = qmp_query_block(errp); 788 if (!error_is_set(errp)) { 789 qmp_marshal_output_query_block(retval, ret, errp); 790 } 791 792 out: 793 794 795 if (local_err) { 796 qerror_report_err(local_err); 797 error_free(local_err); 798 return -1; 799 } 800 return 0; 801 } 802 803 static void qmp_marshal_output_query_blockstats(BlockStatsList * ret_in, QObject **ret_out, Error **errp) 804 { 805 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 806 QmpOutputVisitor *mo = qmp_output_visitor_new(); 807 Visitor *v; 808 809 v = qmp_output_get_visitor(mo); 810 visit_type_BlockStatsList(v, &ret_in, "unused", errp); 811 if (!error_is_set(errp)) { 812 *ret_out = qmp_output_get_qobject(mo); 813 } 814 qmp_output_visitor_cleanup(mo); 815 v = qapi_dealloc_get_visitor(md); 816 visit_type_BlockStatsList(v, &ret_in, "unused", NULL); 817 qapi_dealloc_visitor_cleanup(md); 818 } 819 820 int qmp_marshal_input_query_blockstats(Monitor *mon, const QDict *qdict, QObject **ret) 821 { 822 Error *local_err = NULL; 823 Error **errp = &local_err; 824 QDict *args = (QDict *)qdict; 825 BlockStatsList * retval = NULL; 826 (void)args; 827 if (error_is_set(errp)) { 828 goto out; 829 } 830 retval = qmp_query_blockstats(errp); 831 if (!error_is_set(errp)) { 832 qmp_marshal_output_query_blockstats(retval, ret, errp); 833 } 834 835 out: 836 837 838 if (local_err) { 839 qerror_report_err(local_err); 840 error_free(local_err); 841 return -1; 842 } 843 return 0; 844 } 845 846 static void qmp_marshal_output_query_vnc(VncInfo * ret_in, QObject **ret_out, Error **errp) 847 { 848 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 849 QmpOutputVisitor *mo = qmp_output_visitor_new(); 850 Visitor *v; 851 852 v = qmp_output_get_visitor(mo); 853 visit_type_VncInfo(v, &ret_in, "unused", errp); 854 if (!error_is_set(errp)) { 855 *ret_out = qmp_output_get_qobject(mo); 856 } 857 qmp_output_visitor_cleanup(mo); 858 v = qapi_dealloc_get_visitor(md); 859 visit_type_VncInfo(v, &ret_in, "unused", NULL); 860 qapi_dealloc_visitor_cleanup(md); 861 } 862 863 int qmp_marshal_input_query_vnc(Monitor *mon, const QDict *qdict, QObject **ret) 864 { 865 Error *local_err = NULL; 866 Error **errp = &local_err; 867 QDict *args = (QDict *)qdict; 868 VncInfo * retval = NULL; 869 (void)args; 870 if (error_is_set(errp)) { 871 goto out; 872 } 873 retval = qmp_query_vnc(errp); 874 if (!error_is_set(errp)) { 875 qmp_marshal_output_query_vnc(retval, ret, errp); 876 } 877 878 out: 879 880 881 if (local_err) { 882 qerror_report_err(local_err); 883 error_free(local_err); 884 return -1; 885 } 886 return 0; 887 } 888 889 static void qmp_marshal_output_query_spice(SpiceInfo * ret_in, QObject **ret_out, Error **errp) 890 { 891 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 892 QmpOutputVisitor *mo = qmp_output_visitor_new(); 893 Visitor *v; 894 895 v = qmp_output_get_visitor(mo); 896 visit_type_SpiceInfo(v, &ret_in, "unused", errp); 897 if (!error_is_set(errp)) { 898 *ret_out = qmp_output_get_qobject(mo); 899 } 900 qmp_output_visitor_cleanup(mo); 901 v = qapi_dealloc_get_visitor(md); 902 visit_type_SpiceInfo(v, &ret_in, "unused", NULL); 903 qapi_dealloc_visitor_cleanup(md); 904 } 905 906 int qmp_marshal_input_query_spice(Monitor *mon, const QDict *qdict, QObject **ret) 907 { 908 Error *local_err = NULL; 909 Error **errp = &local_err; 910 QDict *args = (QDict *)qdict; 911 SpiceInfo * retval = NULL; 912 (void)args; 913 if (error_is_set(errp)) { 914 goto out; 915 } 916 retval = qmp_query_spice(errp); 917 if (!error_is_set(errp)) { 918 qmp_marshal_output_query_spice(retval, ret, errp); 919 } 920 921 out: 922 923 924 if (local_err) { 925 qerror_report_err(local_err); 926 error_free(local_err); 927 return -1; 928 } 929 return 0; 930 } 931 932 static void qmp_marshal_output_query_balloon(BalloonInfo * ret_in, QObject **ret_out, Error **errp) 933 { 934 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 935 QmpOutputVisitor *mo = qmp_output_visitor_new(); 936 Visitor *v; 937 938 v = qmp_output_get_visitor(mo); 939 visit_type_BalloonInfo(v, &ret_in, "unused", errp); 940 if (!error_is_set(errp)) { 941 *ret_out = qmp_output_get_qobject(mo); 942 } 943 qmp_output_visitor_cleanup(mo); 944 v = qapi_dealloc_get_visitor(md); 945 visit_type_BalloonInfo(v, &ret_in, "unused", NULL); 946 qapi_dealloc_visitor_cleanup(md); 947 } 948 949 int qmp_marshal_input_query_balloon(Monitor *mon, const QDict *qdict, QObject **ret) 950 { 951 Error *local_err = NULL; 952 Error **errp = &local_err; 953 QDict *args = (QDict *)qdict; 954 BalloonInfo * retval = NULL; 955 (void)args; 956 if (error_is_set(errp)) { 957 goto out; 958 } 959 retval = qmp_query_balloon(errp); 960 if (!error_is_set(errp)) { 961 qmp_marshal_output_query_balloon(retval, ret, errp); 962 } 963 964 out: 965 966 967 if (local_err) { 968 qerror_report_err(local_err); 969 error_free(local_err); 970 return -1; 971 } 972 return 0; 973 } 974 975 static void qmp_marshal_output_query_pci(PciInfoList * ret_in, QObject **ret_out, Error **errp) 976 { 977 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 978 QmpOutputVisitor *mo = qmp_output_visitor_new(); 979 Visitor *v; 980 981 v = qmp_output_get_visitor(mo); 982 visit_type_PciInfoList(v, &ret_in, "unused", errp); 983 if (!error_is_set(errp)) { 984 *ret_out = qmp_output_get_qobject(mo); 985 } 986 qmp_output_visitor_cleanup(mo); 987 v = qapi_dealloc_get_visitor(md); 988 visit_type_PciInfoList(v, &ret_in, "unused", NULL); 989 qapi_dealloc_visitor_cleanup(md); 990 } 991 992 int qmp_marshal_input_query_pci(Monitor *mon, const QDict *qdict, QObject **ret) 993 { 994 Error *local_err = NULL; 995 Error **errp = &local_err; 996 QDict *args = (QDict *)qdict; 997 PciInfoList * retval = NULL; 998 (void)args; 999 if (error_is_set(errp)) { 1000 goto out; 1001 } 1002 retval = qmp_query_pci(errp); 1003 if (!error_is_set(errp)) { 1004 qmp_marshal_output_query_pci(retval, ret, errp); 1005 } 1006 1007 out: 1008 1009 1010 if (local_err) { 1011 qerror_report_err(local_err); 1012 error_free(local_err); 1013 return -1; 1014 } 1015 return 0; 1016 } 1017 1018 static void qmp_marshal_output_query_block_jobs(BlockJobInfoList * ret_in, QObject **ret_out, Error **errp) 1019 { 1020 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 1021 QmpOutputVisitor *mo = qmp_output_visitor_new(); 1022 Visitor *v; 1023 1024 v = qmp_output_get_visitor(mo); 1025 visit_type_BlockJobInfoList(v, &ret_in, "unused", errp); 1026 if (!error_is_set(errp)) { 1027 *ret_out = qmp_output_get_qobject(mo); 1028 } 1029 qmp_output_visitor_cleanup(mo); 1030 v = qapi_dealloc_get_visitor(md); 1031 visit_type_BlockJobInfoList(v, &ret_in, "unused", NULL); 1032 qapi_dealloc_visitor_cleanup(md); 1033 } 1034 1035 int qmp_marshal_input_query_block_jobs(Monitor *mon, const QDict *qdict, QObject **ret) 1036 { 1037 Error *local_err = NULL; 1038 Error **errp = &local_err; 1039 QDict *args = (QDict *)qdict; 1040 BlockJobInfoList * retval = NULL; 1041 (void)args; 1042 if (error_is_set(errp)) { 1043 goto out; 1044 } 1045 retval = qmp_query_block_jobs(errp); 1046 if (!error_is_set(errp)) { 1047 qmp_marshal_output_query_block_jobs(retval, ret, errp); 1048 } 1049 1050 out: 1051 1052 1053 if (local_err) { 1054 qerror_report_err(local_err); 1055 error_free(local_err); 1056 return -1; 1057 } 1058 return 0; 1059 } 1060 1061 int qmp_marshal_input_quit(Monitor *mon, const QDict *qdict, QObject **ret) 1062 { 1063 Error *local_err = NULL; 1064 Error **errp = &local_err; 1065 QDict *args = (QDict *)qdict; 1066 (void)args; 1067 if (error_is_set(errp)) { 1068 goto out; 1069 } 1070 qmp_quit(errp); 1071 1072 out: 1073 1074 1075 if (local_err) { 1076 qerror_report_err(local_err); 1077 error_free(local_err); 1078 return -1; 1079 } 1080 return 0; 1081 } 1082 1083 int qmp_marshal_input_stop(Monitor *mon, const QDict *qdict, QObject **ret) 1084 { 1085 Error *local_err = NULL; 1086 Error **errp = &local_err; 1087 QDict *args = (QDict *)qdict; 1088 (void)args; 1089 if (error_is_set(errp)) { 1090 goto out; 1091 } 1092 qmp_stop(errp); 1093 1094 out: 1095 1096 1097 if (local_err) { 1098 qerror_report_err(local_err); 1099 error_free(local_err); 1100 return -1; 1101 } 1102 return 0; 1103 } 1104 1105 int qmp_marshal_input_system_reset(Monitor *mon, const QDict *qdict, QObject **ret) 1106 { 1107 Error *local_err = NULL; 1108 Error **errp = &local_err; 1109 QDict *args = (QDict *)qdict; 1110 (void)args; 1111 if (error_is_set(errp)) { 1112 goto out; 1113 } 1114 qmp_system_reset(errp); 1115 1116 out: 1117 1118 1119 if (local_err) { 1120 qerror_report_err(local_err); 1121 error_free(local_err); 1122 return -1; 1123 } 1124 return 0; 1125 } 1126 1127 int qmp_marshal_input_system_powerdown(Monitor *mon, const QDict *qdict, QObject **ret) 1128 { 1129 Error *local_err = NULL; 1130 Error **errp = &local_err; 1131 QDict *args = (QDict *)qdict; 1132 (void)args; 1133 if (error_is_set(errp)) { 1134 goto out; 1135 } 1136 qmp_system_powerdown(errp); 1137 1138 out: 1139 1140 1141 if (local_err) { 1142 qerror_report_err(local_err); 1143 error_free(local_err); 1144 return -1; 1145 } 1146 return 0; 1147 } 1148 1149 int qmp_marshal_input_cpu(Monitor *mon, const QDict *qdict, QObject **ret) 1150 { 1151 Error *local_err = NULL; 1152 Error **errp = &local_err; 1153 QDict *args = (QDict *)qdict; 1154 QmpInputVisitor *mi; 1155 QapiDeallocVisitor *md; 1156 Visitor *v; 1157 int64_t index; 1158 1159 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1160 v = qmp_input_get_visitor(mi); 1161 visit_type_int(v, &index, "index", errp); 1162 qmp_input_visitor_cleanup(mi); 1163 1164 if (error_is_set(errp)) { 1165 goto out; 1166 } 1167 qmp_cpu(index, errp); 1168 1169 out: 1170 md = qapi_dealloc_visitor_new(); 1171 v = qapi_dealloc_get_visitor(md); 1172 visit_type_int(v, &index, "index", NULL); 1173 qapi_dealloc_visitor_cleanup(md); 1174 1175 if (local_err) { 1176 qerror_report_err(local_err); 1177 error_free(local_err); 1178 return -1; 1179 } 1180 return 0; 1181 } 1182 1183 int qmp_marshal_input_cpu_add(Monitor *mon, const QDict *qdict, QObject **ret) 1184 { 1185 Error *local_err = NULL; 1186 Error **errp = &local_err; 1187 QDict *args = (QDict *)qdict; 1188 QmpInputVisitor *mi; 1189 QapiDeallocVisitor *md; 1190 Visitor *v; 1191 int64_t id; 1192 1193 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1194 v = qmp_input_get_visitor(mi); 1195 visit_type_int(v, &id, "id", errp); 1196 qmp_input_visitor_cleanup(mi); 1197 1198 if (error_is_set(errp)) { 1199 goto out; 1200 } 1201 qmp_cpu_add(id, errp); 1202 1203 out: 1204 md = qapi_dealloc_visitor_new(); 1205 v = qapi_dealloc_get_visitor(md); 1206 visit_type_int(v, &id, "id", NULL); 1207 qapi_dealloc_visitor_cleanup(md); 1208 1209 if (local_err) { 1210 qerror_report_err(local_err); 1211 error_free(local_err); 1212 return -1; 1213 } 1214 return 0; 1215 } 1216 1217 int qmp_marshal_input_memsave(Monitor *mon, const QDict *qdict, QObject **ret) 1218 { 1219 Error *local_err = NULL; 1220 Error **errp = &local_err; 1221 QDict *args = (QDict *)qdict; 1222 QmpInputVisitor *mi; 1223 QapiDeallocVisitor *md; 1224 Visitor *v; 1225 int64_t val; 1226 int64_t size; 1227 char * filename = NULL; 1228 bool has_cpu_index = false; 1229 int64_t cpu_index; 1230 1231 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1232 v = qmp_input_get_visitor(mi); 1233 visit_type_int(v, &val, "val", errp); 1234 visit_type_int(v, &size, "size", errp); 1235 visit_type_str(v, &filename, "filename", errp); 1236 visit_start_optional(v, &has_cpu_index, "cpu-index", errp); 1237 if (has_cpu_index) { 1238 visit_type_int(v, &cpu_index, "cpu-index", errp); 1239 } 1240 visit_end_optional(v, errp); 1241 qmp_input_visitor_cleanup(mi); 1242 1243 if (error_is_set(errp)) { 1244 goto out; 1245 } 1246 qmp_memsave(val, size, filename, has_cpu_index, cpu_index, errp); 1247 1248 out: 1249 md = qapi_dealloc_visitor_new(); 1250 v = qapi_dealloc_get_visitor(md); 1251 visit_type_int(v, &val, "val", NULL); 1252 visit_type_int(v, &size, "size", NULL); 1253 visit_type_str(v, &filename, "filename", NULL); 1254 visit_start_optional(v, &has_cpu_index, "cpu-index", NULL); 1255 if (has_cpu_index) { 1256 visit_type_int(v, &cpu_index, "cpu-index", NULL); 1257 } 1258 visit_end_optional(v, NULL); 1259 qapi_dealloc_visitor_cleanup(md); 1260 1261 if (local_err) { 1262 qerror_report_err(local_err); 1263 error_free(local_err); 1264 return -1; 1265 } 1266 return 0; 1267 } 1268 1269 int qmp_marshal_input_pmemsave(Monitor *mon, const QDict *qdict, QObject **ret) 1270 { 1271 Error *local_err = NULL; 1272 Error **errp = &local_err; 1273 QDict *args = (QDict *)qdict; 1274 QmpInputVisitor *mi; 1275 QapiDeallocVisitor *md; 1276 Visitor *v; 1277 int64_t val; 1278 int64_t size; 1279 char * filename = NULL; 1280 1281 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1282 v = qmp_input_get_visitor(mi); 1283 visit_type_int(v, &val, "val", errp); 1284 visit_type_int(v, &size, "size", errp); 1285 visit_type_str(v, &filename, "filename", errp); 1286 qmp_input_visitor_cleanup(mi); 1287 1288 if (error_is_set(errp)) { 1289 goto out; 1290 } 1291 qmp_pmemsave(val, size, filename, errp); 1292 1293 out: 1294 md = qapi_dealloc_visitor_new(); 1295 v = qapi_dealloc_get_visitor(md); 1296 visit_type_int(v, &val, "val", NULL); 1297 visit_type_int(v, &size, "size", NULL); 1298 visit_type_str(v, &filename, "filename", NULL); 1299 qapi_dealloc_visitor_cleanup(md); 1300 1301 if (local_err) { 1302 qerror_report_err(local_err); 1303 error_free(local_err); 1304 return -1; 1305 } 1306 return 0; 1307 } 1308 1309 int qmp_marshal_input_cont(Monitor *mon, const QDict *qdict, QObject **ret) 1310 { 1311 Error *local_err = NULL; 1312 Error **errp = &local_err; 1313 QDict *args = (QDict *)qdict; 1314 (void)args; 1315 if (error_is_set(errp)) { 1316 goto out; 1317 } 1318 qmp_cont(errp); 1319 1320 out: 1321 1322 1323 if (local_err) { 1324 qerror_report_err(local_err); 1325 error_free(local_err); 1326 return -1; 1327 } 1328 return 0; 1329 } 1330 1331 int qmp_marshal_input_system_wakeup(Monitor *mon, const QDict *qdict, QObject **ret) 1332 { 1333 Error *local_err = NULL; 1334 Error **errp = &local_err; 1335 QDict *args = (QDict *)qdict; 1336 (void)args; 1337 if (error_is_set(errp)) { 1338 goto out; 1339 } 1340 qmp_system_wakeup(errp); 1341 1342 out: 1343 1344 1345 if (local_err) { 1346 qerror_report_err(local_err); 1347 error_free(local_err); 1348 return -1; 1349 } 1350 return 0; 1351 } 1352 1353 int qmp_marshal_input_inject_nmi(Monitor *mon, const QDict *qdict, QObject **ret) 1354 { 1355 Error *local_err = NULL; 1356 Error **errp = &local_err; 1357 QDict *args = (QDict *)qdict; 1358 (void)args; 1359 if (error_is_set(errp)) { 1360 goto out; 1361 } 1362 qmp_inject_nmi(errp); 1363 1364 out: 1365 1366 1367 if (local_err) { 1368 qerror_report_err(local_err); 1369 error_free(local_err); 1370 return -1; 1371 } 1372 return 0; 1373 } 1374 1375 int qmp_marshal_input_set_link(Monitor *mon, const QDict *qdict, QObject **ret) 1376 { 1377 Error *local_err = NULL; 1378 Error **errp = &local_err; 1379 QDict *args = (QDict *)qdict; 1380 QmpInputVisitor *mi; 1381 QapiDeallocVisitor *md; 1382 Visitor *v; 1383 char * name = NULL; 1384 bool up; 1385 1386 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1387 v = qmp_input_get_visitor(mi); 1388 visit_type_str(v, &name, "name", errp); 1389 visit_type_bool(v, &up, "up", errp); 1390 qmp_input_visitor_cleanup(mi); 1391 1392 if (error_is_set(errp)) { 1393 goto out; 1394 } 1395 qmp_set_link(name, up, errp); 1396 1397 out: 1398 md = qapi_dealloc_visitor_new(); 1399 v = qapi_dealloc_get_visitor(md); 1400 visit_type_str(v, &name, "name", NULL); 1401 visit_type_bool(v, &up, "up", NULL); 1402 qapi_dealloc_visitor_cleanup(md); 1403 1404 if (local_err) { 1405 qerror_report_err(local_err); 1406 error_free(local_err); 1407 return -1; 1408 } 1409 return 0; 1410 } 1411 1412 int qmp_marshal_input_block_passwd(Monitor *mon, const QDict *qdict, QObject **ret) 1413 { 1414 Error *local_err = NULL; 1415 Error **errp = &local_err; 1416 QDict *args = (QDict *)qdict; 1417 QmpInputVisitor *mi; 1418 QapiDeallocVisitor *md; 1419 Visitor *v; 1420 char * device = NULL; 1421 char * password = NULL; 1422 1423 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1424 v = qmp_input_get_visitor(mi); 1425 visit_type_str(v, &device, "device", errp); 1426 visit_type_str(v, &password, "password", errp); 1427 qmp_input_visitor_cleanup(mi); 1428 1429 if (error_is_set(errp)) { 1430 goto out; 1431 } 1432 qmp_block_passwd(device, password, errp); 1433 1434 out: 1435 md = qapi_dealloc_visitor_new(); 1436 v = qapi_dealloc_get_visitor(md); 1437 visit_type_str(v, &device, "device", NULL); 1438 visit_type_str(v, &password, "password", NULL); 1439 qapi_dealloc_visitor_cleanup(md); 1440 1441 if (local_err) { 1442 qerror_report_err(local_err); 1443 error_free(local_err); 1444 return -1; 1445 } 1446 return 0; 1447 } 1448 1449 int qmp_marshal_input_balloon(Monitor *mon, const QDict *qdict, QObject **ret) 1450 { 1451 Error *local_err = NULL; 1452 Error **errp = &local_err; 1453 QDict *args = (QDict *)qdict; 1454 QmpInputVisitor *mi; 1455 QapiDeallocVisitor *md; 1456 Visitor *v; 1457 int64_t value; 1458 1459 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1460 v = qmp_input_get_visitor(mi); 1461 visit_type_int(v, &value, "value", errp); 1462 qmp_input_visitor_cleanup(mi); 1463 1464 if (error_is_set(errp)) { 1465 goto out; 1466 } 1467 qmp_balloon(value, errp); 1468 1469 out: 1470 md = qapi_dealloc_visitor_new(); 1471 v = qapi_dealloc_get_visitor(md); 1472 visit_type_int(v, &value, "value", NULL); 1473 qapi_dealloc_visitor_cleanup(md); 1474 1475 if (local_err) { 1476 qerror_report_err(local_err); 1477 error_free(local_err); 1478 return -1; 1479 } 1480 return 0; 1481 } 1482 1483 int qmp_marshal_input_block_resize(Monitor *mon, const QDict *qdict, QObject **ret) 1484 { 1485 Error *local_err = NULL; 1486 Error **errp = &local_err; 1487 QDict *args = (QDict *)qdict; 1488 QmpInputVisitor *mi; 1489 QapiDeallocVisitor *md; 1490 Visitor *v; 1491 char * device = NULL; 1492 int64_t size; 1493 1494 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1495 v = qmp_input_get_visitor(mi); 1496 visit_type_str(v, &device, "device", errp); 1497 visit_type_int(v, &size, "size", errp); 1498 qmp_input_visitor_cleanup(mi); 1499 1500 if (error_is_set(errp)) { 1501 goto out; 1502 } 1503 qmp_block_resize(device, size, errp); 1504 1505 out: 1506 md = qapi_dealloc_visitor_new(); 1507 v = qapi_dealloc_get_visitor(md); 1508 visit_type_str(v, &device, "device", NULL); 1509 visit_type_int(v, &size, "size", NULL); 1510 qapi_dealloc_visitor_cleanup(md); 1511 1512 if (local_err) { 1513 qerror_report_err(local_err); 1514 error_free(local_err); 1515 return -1; 1516 } 1517 return 0; 1518 } 1519 1520 int qmp_marshal_input_transaction(Monitor *mon, const QDict *qdict, QObject **ret) 1521 { 1522 Error *local_err = NULL; 1523 Error **errp = &local_err; 1524 QDict *args = (QDict *)qdict; 1525 QmpInputVisitor *mi; 1526 QapiDeallocVisitor *md; 1527 Visitor *v; 1528 TransactionActionList * actions = NULL; 1529 1530 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1531 v = qmp_input_get_visitor(mi); 1532 visit_type_TransactionActionList(v, &actions, "actions", errp); 1533 qmp_input_visitor_cleanup(mi); 1534 1535 if (error_is_set(errp)) { 1536 goto out; 1537 } 1538 qmp_transaction(actions, errp); 1539 1540 out: 1541 md = qapi_dealloc_visitor_new(); 1542 v = qapi_dealloc_get_visitor(md); 1543 visit_type_TransactionActionList(v, &actions, "actions", NULL); 1544 qapi_dealloc_visitor_cleanup(md); 1545 1546 if (local_err) { 1547 qerror_report_err(local_err); 1548 error_free(local_err); 1549 return -1; 1550 } 1551 return 0; 1552 } 1553 1554 int qmp_marshal_input_blockdev_snapshot_sync(Monitor *mon, const QDict *qdict, QObject **ret) 1555 { 1556 Error *local_err = NULL; 1557 Error **errp = &local_err; 1558 QDict *args = (QDict *)qdict; 1559 QmpInputVisitor *mi; 1560 QapiDeallocVisitor *md; 1561 Visitor *v; 1562 char * device = NULL; 1563 char * snapshot_file = NULL; 1564 bool has_format = false; 1565 char * format = NULL; 1566 bool has_mode = false; 1567 NewImageMode mode; 1568 1569 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1570 v = qmp_input_get_visitor(mi); 1571 visit_type_str(v, &device, "device", errp); 1572 visit_type_str(v, &snapshot_file, "snapshot-file", errp); 1573 visit_start_optional(v, &has_format, "format", errp); 1574 if (has_format) { 1575 visit_type_str(v, &format, "format", errp); 1576 } 1577 visit_end_optional(v, errp); 1578 visit_start_optional(v, &has_mode, "mode", errp); 1579 if (has_mode) { 1580 visit_type_NewImageMode(v, &mode, "mode", errp); 1581 } 1582 visit_end_optional(v, errp); 1583 qmp_input_visitor_cleanup(mi); 1584 1585 if (error_is_set(errp)) { 1586 goto out; 1587 } 1588 qmp_blockdev_snapshot_sync(device, snapshot_file, has_format, format, has_mode, mode, errp); 1589 1590 out: 1591 md = qapi_dealloc_visitor_new(); 1592 v = qapi_dealloc_get_visitor(md); 1593 visit_type_str(v, &device, "device", NULL); 1594 visit_type_str(v, &snapshot_file, "snapshot-file", NULL); 1595 visit_start_optional(v, &has_format, "format", NULL); 1596 if (has_format) { 1597 visit_type_str(v, &format, "format", NULL); 1598 } 1599 visit_end_optional(v, NULL); 1600 visit_start_optional(v, &has_mode, "mode", NULL); 1601 if (has_mode) { 1602 visit_type_NewImageMode(v, &mode, "mode", NULL); 1603 } 1604 visit_end_optional(v, NULL); 1605 qapi_dealloc_visitor_cleanup(md); 1606 1607 if (local_err) { 1608 qerror_report_err(local_err); 1609 error_free(local_err); 1610 return -1; 1611 } 1612 return 0; 1613 } 1614 1615 int qmp_marshal_input_blockdev_snapshot_internal_sync(Monitor *mon, const QDict *qdict, QObject **ret) 1616 { 1617 Error *local_err = NULL; 1618 Error **errp = &local_err; 1619 QDict *args = (QDict *)qdict; 1620 QmpInputVisitor *mi; 1621 QapiDeallocVisitor *md; 1622 Visitor *v; 1623 char * device = NULL; 1624 char * name = NULL; 1625 1626 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1627 v = qmp_input_get_visitor(mi); 1628 visit_type_str(v, &device, "device", errp); 1629 visit_type_str(v, &name, "name", errp); 1630 qmp_input_visitor_cleanup(mi); 1631 1632 if (error_is_set(errp)) { 1633 goto out; 1634 } 1635 qmp_blockdev_snapshot_internal_sync(device, name, errp); 1636 1637 out: 1638 md = qapi_dealloc_visitor_new(); 1639 v = qapi_dealloc_get_visitor(md); 1640 visit_type_str(v, &device, "device", NULL); 1641 visit_type_str(v, &name, "name", NULL); 1642 qapi_dealloc_visitor_cleanup(md); 1643 1644 if (local_err) { 1645 qerror_report_err(local_err); 1646 error_free(local_err); 1647 return -1; 1648 } 1649 return 0; 1650 } 1651 1652 static void qmp_marshal_output_blockdev_snapshot_delete_internal_sync(SnapshotInfo * ret_in, QObject **ret_out, Error **errp) 1653 { 1654 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 1655 QmpOutputVisitor *mo = qmp_output_visitor_new(); 1656 Visitor *v; 1657 1658 v = qmp_output_get_visitor(mo); 1659 visit_type_SnapshotInfo(v, &ret_in, "unused", errp); 1660 if (!error_is_set(errp)) { 1661 *ret_out = qmp_output_get_qobject(mo); 1662 } 1663 qmp_output_visitor_cleanup(mo); 1664 v = qapi_dealloc_get_visitor(md); 1665 visit_type_SnapshotInfo(v, &ret_in, "unused", NULL); 1666 qapi_dealloc_visitor_cleanup(md); 1667 } 1668 1669 int qmp_marshal_input_blockdev_snapshot_delete_internal_sync(Monitor *mon, const QDict *qdict, QObject **ret) 1670 { 1671 Error *local_err = NULL; 1672 Error **errp = &local_err; 1673 QDict *args = (QDict *)qdict; 1674 SnapshotInfo * retval = NULL; 1675 QmpInputVisitor *mi; 1676 QapiDeallocVisitor *md; 1677 Visitor *v; 1678 char * device = NULL; 1679 bool has_id = false; 1680 char * id = NULL; 1681 bool has_name = false; 1682 char * name = NULL; 1683 1684 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1685 v = qmp_input_get_visitor(mi); 1686 visit_type_str(v, &device, "device", errp); 1687 visit_start_optional(v, &has_id, "id", errp); 1688 if (has_id) { 1689 visit_type_str(v, &id, "id", errp); 1690 } 1691 visit_end_optional(v, errp); 1692 visit_start_optional(v, &has_name, "name", errp); 1693 if (has_name) { 1694 visit_type_str(v, &name, "name", errp); 1695 } 1696 visit_end_optional(v, errp); 1697 qmp_input_visitor_cleanup(mi); 1698 1699 if (error_is_set(errp)) { 1700 goto out; 1701 } 1702 retval = qmp_blockdev_snapshot_delete_internal_sync(device, has_id, id, has_name, name, errp); 1703 if (!error_is_set(errp)) { 1704 qmp_marshal_output_blockdev_snapshot_delete_internal_sync(retval, ret, errp); 1705 } 1706 1707 out: 1708 md = qapi_dealloc_visitor_new(); 1709 v = qapi_dealloc_get_visitor(md); 1710 visit_type_str(v, &device, "device", NULL); 1711 visit_start_optional(v, &has_id, "id", NULL); 1712 if (has_id) { 1713 visit_type_str(v, &id, "id", NULL); 1714 } 1715 visit_end_optional(v, NULL); 1716 visit_start_optional(v, &has_name, "name", NULL); 1717 if (has_name) { 1718 visit_type_str(v, &name, "name", NULL); 1719 } 1720 visit_end_optional(v, NULL); 1721 qapi_dealloc_visitor_cleanup(md); 1722 1723 if (local_err) { 1724 qerror_report_err(local_err); 1725 error_free(local_err); 1726 return -1; 1727 } 1728 return 0; 1729 } 1730 1731 static void qmp_marshal_output_human_monitor_command(char * ret_in, QObject **ret_out, Error **errp) 1732 { 1733 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 1734 QmpOutputVisitor *mo = qmp_output_visitor_new(); 1735 Visitor *v; 1736 1737 v = qmp_output_get_visitor(mo); 1738 visit_type_str(v, &ret_in, "unused", errp); 1739 if (!error_is_set(errp)) { 1740 *ret_out = qmp_output_get_qobject(mo); 1741 } 1742 qmp_output_visitor_cleanup(mo); 1743 v = qapi_dealloc_get_visitor(md); 1744 visit_type_str(v, &ret_in, "unused", NULL); 1745 qapi_dealloc_visitor_cleanup(md); 1746 } 1747 1748 int qmp_marshal_input_human_monitor_command(Monitor *mon, const QDict *qdict, QObject **ret) 1749 { 1750 Error *local_err = NULL; 1751 Error **errp = &local_err; 1752 QDict *args = (QDict *)qdict; 1753 char * retval = NULL; 1754 QmpInputVisitor *mi; 1755 QapiDeallocVisitor *md; 1756 Visitor *v; 1757 char * command_line = NULL; 1758 bool has_cpu_index = false; 1759 int64_t cpu_index; 1760 1761 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1762 v = qmp_input_get_visitor(mi); 1763 visit_type_str(v, &command_line, "command-line", errp); 1764 visit_start_optional(v, &has_cpu_index, "cpu-index", errp); 1765 if (has_cpu_index) { 1766 visit_type_int(v, &cpu_index, "cpu-index", errp); 1767 } 1768 visit_end_optional(v, errp); 1769 qmp_input_visitor_cleanup(mi); 1770 1771 if (error_is_set(errp)) { 1772 goto out; 1773 } 1774 retval = qmp_human_monitor_command(command_line, has_cpu_index, cpu_index, errp); 1775 if (!error_is_set(errp)) { 1776 qmp_marshal_output_human_monitor_command(retval, ret, errp); 1777 } 1778 1779 out: 1780 md = qapi_dealloc_visitor_new(); 1781 v = qapi_dealloc_get_visitor(md); 1782 visit_type_str(v, &command_line, "command-line", NULL); 1783 visit_start_optional(v, &has_cpu_index, "cpu-index", NULL); 1784 if (has_cpu_index) { 1785 visit_type_int(v, &cpu_index, "cpu-index", NULL); 1786 } 1787 visit_end_optional(v, NULL); 1788 qapi_dealloc_visitor_cleanup(md); 1789 1790 if (local_err) { 1791 qerror_report_err(local_err); 1792 error_free(local_err); 1793 return -1; 1794 } 1795 return 0; 1796 } 1797 1798 int qmp_marshal_input_block_commit(Monitor *mon, const QDict *qdict, QObject **ret) 1799 { 1800 Error *local_err = NULL; 1801 Error **errp = &local_err; 1802 QDict *args = (QDict *)qdict; 1803 QmpInputVisitor *mi; 1804 QapiDeallocVisitor *md; 1805 Visitor *v; 1806 char * device = NULL; 1807 bool has_base = false; 1808 char * base = NULL; 1809 char * top = NULL; 1810 bool has_speed = false; 1811 int64_t speed; 1812 1813 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1814 v = qmp_input_get_visitor(mi); 1815 visit_type_str(v, &device, "device", errp); 1816 visit_start_optional(v, &has_base, "base", errp); 1817 if (has_base) { 1818 visit_type_str(v, &base, "base", errp); 1819 } 1820 visit_end_optional(v, errp); 1821 visit_type_str(v, &top, "top", errp); 1822 visit_start_optional(v, &has_speed, "speed", errp); 1823 if (has_speed) { 1824 visit_type_int(v, &speed, "speed", errp); 1825 } 1826 visit_end_optional(v, errp); 1827 qmp_input_visitor_cleanup(mi); 1828 1829 if (error_is_set(errp)) { 1830 goto out; 1831 } 1832 qmp_block_commit(device, has_base, base, top, has_speed, speed, errp); 1833 1834 out: 1835 md = qapi_dealloc_visitor_new(); 1836 v = qapi_dealloc_get_visitor(md); 1837 visit_type_str(v, &device, "device", NULL); 1838 visit_start_optional(v, &has_base, "base", NULL); 1839 if (has_base) { 1840 visit_type_str(v, &base, "base", NULL); 1841 } 1842 visit_end_optional(v, NULL); 1843 visit_type_str(v, &top, "top", NULL); 1844 visit_start_optional(v, &has_speed, "speed", NULL); 1845 if (has_speed) { 1846 visit_type_int(v, &speed, "speed", NULL); 1847 } 1848 visit_end_optional(v, NULL); 1849 qapi_dealloc_visitor_cleanup(md); 1850 1851 if (local_err) { 1852 qerror_report_err(local_err); 1853 error_free(local_err); 1854 return -1; 1855 } 1856 return 0; 1857 } 1858 1859 int qmp_marshal_input_drive_backup(Monitor *mon, const QDict *qdict, QObject **ret) 1860 { 1861 Error *local_err = NULL; 1862 Error **errp = &local_err; 1863 QDict *args = (QDict *)qdict; 1864 QmpInputVisitor *mi; 1865 QapiDeallocVisitor *md; 1866 Visitor *v; 1867 char * device = NULL; 1868 char * target = NULL; 1869 bool has_format = false; 1870 char * format = NULL; 1871 MirrorSyncMode sync; 1872 bool has_mode = false; 1873 NewImageMode mode; 1874 bool has_speed = false; 1875 int64_t speed; 1876 bool has_on_source_error = false; 1877 BlockdevOnError on_source_error; 1878 bool has_on_target_error = false; 1879 BlockdevOnError on_target_error; 1880 1881 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1882 v = qmp_input_get_visitor(mi); 1883 visit_type_str(v, &device, "device", errp); 1884 visit_type_str(v, &target, "target", errp); 1885 visit_start_optional(v, &has_format, "format", errp); 1886 if (has_format) { 1887 visit_type_str(v, &format, "format", errp); 1888 } 1889 visit_end_optional(v, errp); 1890 visit_type_MirrorSyncMode(v, &sync, "sync", errp); 1891 visit_start_optional(v, &has_mode, "mode", errp); 1892 if (has_mode) { 1893 visit_type_NewImageMode(v, &mode, "mode", errp); 1894 } 1895 visit_end_optional(v, errp); 1896 visit_start_optional(v, &has_speed, "speed", errp); 1897 if (has_speed) { 1898 visit_type_int(v, &speed, "speed", errp); 1899 } 1900 visit_end_optional(v, errp); 1901 visit_start_optional(v, &has_on_source_error, "on-source-error", errp); 1902 if (has_on_source_error) { 1903 visit_type_BlockdevOnError(v, &on_source_error, "on-source-error", errp); 1904 } 1905 visit_end_optional(v, errp); 1906 visit_start_optional(v, &has_on_target_error, "on-target-error", errp); 1907 if (has_on_target_error) { 1908 visit_type_BlockdevOnError(v, &on_target_error, "on-target-error", errp); 1909 } 1910 visit_end_optional(v, errp); 1911 qmp_input_visitor_cleanup(mi); 1912 1913 if (error_is_set(errp)) { 1914 goto out; 1915 } 1916 qmp_drive_backup(device, target, has_format, format, sync, has_mode, mode, has_speed, speed, has_on_source_error, on_source_error, has_on_target_error, on_target_error, errp); 1917 1918 out: 1919 md = qapi_dealloc_visitor_new(); 1920 v = qapi_dealloc_get_visitor(md); 1921 visit_type_str(v, &device, "device", NULL); 1922 visit_type_str(v, &target, "target", NULL); 1923 visit_start_optional(v, &has_format, "format", NULL); 1924 if (has_format) { 1925 visit_type_str(v, &format, "format", NULL); 1926 } 1927 visit_end_optional(v, NULL); 1928 visit_type_MirrorSyncMode(v, &sync, "sync", NULL); 1929 visit_start_optional(v, &has_mode, "mode", NULL); 1930 if (has_mode) { 1931 visit_type_NewImageMode(v, &mode, "mode", NULL); 1932 } 1933 visit_end_optional(v, NULL); 1934 visit_start_optional(v, &has_speed, "speed", NULL); 1935 if (has_speed) { 1936 visit_type_int(v, &speed, "speed", NULL); 1937 } 1938 visit_end_optional(v, NULL); 1939 visit_start_optional(v, &has_on_source_error, "on-source-error", NULL); 1940 if (has_on_source_error) { 1941 visit_type_BlockdevOnError(v, &on_source_error, "on-source-error", NULL); 1942 } 1943 visit_end_optional(v, NULL); 1944 visit_start_optional(v, &has_on_target_error, "on-target-error", NULL); 1945 if (has_on_target_error) { 1946 visit_type_BlockdevOnError(v, &on_target_error, "on-target-error", NULL); 1947 } 1948 visit_end_optional(v, NULL); 1949 qapi_dealloc_visitor_cleanup(md); 1950 1951 if (local_err) { 1952 qerror_report_err(local_err); 1953 error_free(local_err); 1954 return -1; 1955 } 1956 return 0; 1957 } 1958 1959 int qmp_marshal_input_drive_mirror(Monitor *mon, const QDict *qdict, QObject **ret) 1960 { 1961 Error *local_err = NULL; 1962 Error **errp = &local_err; 1963 QDict *args = (QDict *)qdict; 1964 QmpInputVisitor *mi; 1965 QapiDeallocVisitor *md; 1966 Visitor *v; 1967 char * device = NULL; 1968 char * target = NULL; 1969 bool has_format = false; 1970 char * format = NULL; 1971 MirrorSyncMode sync; 1972 bool has_mode = false; 1973 NewImageMode mode; 1974 bool has_speed = false; 1975 int64_t speed; 1976 bool has_granularity = false; 1977 uint32_t granularity; 1978 bool has_buf_size = false; 1979 int64_t buf_size; 1980 bool has_on_source_error = false; 1981 BlockdevOnError on_source_error; 1982 bool has_on_target_error = false; 1983 BlockdevOnError on_target_error; 1984 1985 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 1986 v = qmp_input_get_visitor(mi); 1987 visit_type_str(v, &device, "device", errp); 1988 visit_type_str(v, &target, "target", errp); 1989 visit_start_optional(v, &has_format, "format", errp); 1990 if (has_format) { 1991 visit_type_str(v, &format, "format", errp); 1992 } 1993 visit_end_optional(v, errp); 1994 visit_type_MirrorSyncMode(v, &sync, "sync", errp); 1995 visit_start_optional(v, &has_mode, "mode", errp); 1996 if (has_mode) { 1997 visit_type_NewImageMode(v, &mode, "mode", errp); 1998 } 1999 visit_end_optional(v, errp); 2000 visit_start_optional(v, &has_speed, "speed", errp); 2001 if (has_speed) { 2002 visit_type_int(v, &speed, "speed", errp); 2003 } 2004 visit_end_optional(v, errp); 2005 visit_start_optional(v, &has_granularity, "granularity", errp); 2006 if (has_granularity) { 2007 visit_type_uint32(v, &granularity, "granularity", errp); 2008 } 2009 visit_end_optional(v, errp); 2010 visit_start_optional(v, &has_buf_size, "buf-size", errp); 2011 if (has_buf_size) { 2012 visit_type_int(v, &buf_size, "buf-size", errp); 2013 } 2014 visit_end_optional(v, errp); 2015 visit_start_optional(v, &has_on_source_error, "on-source-error", errp); 2016 if (has_on_source_error) { 2017 visit_type_BlockdevOnError(v, &on_source_error, "on-source-error", errp); 2018 } 2019 visit_end_optional(v, errp); 2020 visit_start_optional(v, &has_on_target_error, "on-target-error", errp); 2021 if (has_on_target_error) { 2022 visit_type_BlockdevOnError(v, &on_target_error, "on-target-error", errp); 2023 } 2024 visit_end_optional(v, errp); 2025 qmp_input_visitor_cleanup(mi); 2026 2027 if (error_is_set(errp)) { 2028 goto out; 2029 } 2030 qmp_drive_mirror(device, target, has_format, format, sync, has_mode, mode, has_speed, speed, has_granularity, granularity, has_buf_size, buf_size, has_on_source_error, on_source_error, has_on_target_error, on_target_error, errp); 2031 2032 out: 2033 md = qapi_dealloc_visitor_new(); 2034 v = qapi_dealloc_get_visitor(md); 2035 visit_type_str(v, &device, "device", NULL); 2036 visit_type_str(v, &target, "target", NULL); 2037 visit_start_optional(v, &has_format, "format", NULL); 2038 if (has_format) { 2039 visit_type_str(v, &format, "format", NULL); 2040 } 2041 visit_end_optional(v, NULL); 2042 visit_type_MirrorSyncMode(v, &sync, "sync", NULL); 2043 visit_start_optional(v, &has_mode, "mode", NULL); 2044 if (has_mode) { 2045 visit_type_NewImageMode(v, &mode, "mode", NULL); 2046 } 2047 visit_end_optional(v, NULL); 2048 visit_start_optional(v, &has_speed, "speed", NULL); 2049 if (has_speed) { 2050 visit_type_int(v, &speed, "speed", NULL); 2051 } 2052 visit_end_optional(v, NULL); 2053 visit_start_optional(v, &has_granularity, "granularity", NULL); 2054 if (has_granularity) { 2055 visit_type_uint32(v, &granularity, "granularity", NULL); 2056 } 2057 visit_end_optional(v, NULL); 2058 visit_start_optional(v, &has_buf_size, "buf-size", NULL); 2059 if (has_buf_size) { 2060 visit_type_int(v, &buf_size, "buf-size", NULL); 2061 } 2062 visit_end_optional(v, NULL); 2063 visit_start_optional(v, &has_on_source_error, "on-source-error", NULL); 2064 if (has_on_source_error) { 2065 visit_type_BlockdevOnError(v, &on_source_error, "on-source-error", NULL); 2066 } 2067 visit_end_optional(v, NULL); 2068 visit_start_optional(v, &has_on_target_error, "on-target-error", NULL); 2069 if (has_on_target_error) { 2070 visit_type_BlockdevOnError(v, &on_target_error, "on-target-error", NULL); 2071 } 2072 visit_end_optional(v, NULL); 2073 qapi_dealloc_visitor_cleanup(md); 2074 2075 if (local_err) { 2076 qerror_report_err(local_err); 2077 error_free(local_err); 2078 return -1; 2079 } 2080 return 0; 2081 } 2082 2083 int qmp_marshal_input_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret) 2084 { 2085 Error *local_err = NULL; 2086 Error **errp = &local_err; 2087 QDict *args = (QDict *)qdict; 2088 (void)args; 2089 if (error_is_set(errp)) { 2090 goto out; 2091 } 2092 qmp_migrate_cancel(errp); 2093 2094 out: 2095 2096 2097 if (local_err) { 2098 qerror_report_err(local_err); 2099 error_free(local_err); 2100 return -1; 2101 } 2102 return 0; 2103 } 2104 2105 int qmp_marshal_input_migrate_set_downtime(Monitor *mon, const QDict *qdict, QObject **ret) 2106 { 2107 Error *local_err = NULL; 2108 Error **errp = &local_err; 2109 QDict *args = (QDict *)qdict; 2110 QmpInputVisitor *mi; 2111 QapiDeallocVisitor *md; 2112 Visitor *v; 2113 double value; 2114 2115 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2116 v = qmp_input_get_visitor(mi); 2117 visit_type_number(v, &value, "value", errp); 2118 qmp_input_visitor_cleanup(mi); 2119 2120 if (error_is_set(errp)) { 2121 goto out; 2122 } 2123 qmp_migrate_set_downtime(value, errp); 2124 2125 out: 2126 md = qapi_dealloc_visitor_new(); 2127 v = qapi_dealloc_get_visitor(md); 2128 visit_type_number(v, &value, "value", NULL); 2129 qapi_dealloc_visitor_cleanup(md); 2130 2131 if (local_err) { 2132 qerror_report_err(local_err); 2133 error_free(local_err); 2134 return -1; 2135 } 2136 return 0; 2137 } 2138 2139 int qmp_marshal_input_migrate_set_speed(Monitor *mon, const QDict *qdict, QObject **ret) 2140 { 2141 Error *local_err = NULL; 2142 Error **errp = &local_err; 2143 QDict *args = (QDict *)qdict; 2144 QmpInputVisitor *mi; 2145 QapiDeallocVisitor *md; 2146 Visitor *v; 2147 int64_t value; 2148 2149 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2150 v = qmp_input_get_visitor(mi); 2151 visit_type_int(v, &value, "value", errp); 2152 qmp_input_visitor_cleanup(mi); 2153 2154 if (error_is_set(errp)) { 2155 goto out; 2156 } 2157 qmp_migrate_set_speed(value, errp); 2158 2159 out: 2160 md = qapi_dealloc_visitor_new(); 2161 v = qapi_dealloc_get_visitor(md); 2162 visit_type_int(v, &value, "value", NULL); 2163 qapi_dealloc_visitor_cleanup(md); 2164 2165 if (local_err) { 2166 qerror_report_err(local_err); 2167 error_free(local_err); 2168 return -1; 2169 } 2170 return 0; 2171 } 2172 2173 int qmp_marshal_input_migrate_set_cache_size(Monitor *mon, const QDict *qdict, QObject **ret) 2174 { 2175 Error *local_err = NULL; 2176 Error **errp = &local_err; 2177 QDict *args = (QDict *)qdict; 2178 QmpInputVisitor *mi; 2179 QapiDeallocVisitor *md; 2180 Visitor *v; 2181 int64_t value; 2182 2183 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2184 v = qmp_input_get_visitor(mi); 2185 visit_type_int(v, &value, "value", errp); 2186 qmp_input_visitor_cleanup(mi); 2187 2188 if (error_is_set(errp)) { 2189 goto out; 2190 } 2191 qmp_migrate_set_cache_size(value, errp); 2192 2193 out: 2194 md = qapi_dealloc_visitor_new(); 2195 v = qapi_dealloc_get_visitor(md); 2196 visit_type_int(v, &value, "value", NULL); 2197 qapi_dealloc_visitor_cleanup(md); 2198 2199 if (local_err) { 2200 qerror_report_err(local_err); 2201 error_free(local_err); 2202 return -1; 2203 } 2204 return 0; 2205 } 2206 2207 static void qmp_marshal_output_query_migrate_cache_size(int64_t ret_in, QObject **ret_out, Error **errp) 2208 { 2209 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 2210 QmpOutputVisitor *mo = qmp_output_visitor_new(); 2211 Visitor *v; 2212 2213 v = qmp_output_get_visitor(mo); 2214 visit_type_int(v, &ret_in, "unused", errp); 2215 if (!error_is_set(errp)) { 2216 *ret_out = qmp_output_get_qobject(mo); 2217 } 2218 qmp_output_visitor_cleanup(mo); 2219 v = qapi_dealloc_get_visitor(md); 2220 visit_type_int(v, &ret_in, "unused", NULL); 2221 qapi_dealloc_visitor_cleanup(md); 2222 } 2223 2224 int qmp_marshal_input_query_migrate_cache_size(Monitor *mon, const QDict *qdict, QObject **ret) 2225 { 2226 Error *local_err = NULL; 2227 Error **errp = &local_err; 2228 QDict *args = (QDict *)qdict; 2229 int64_t retval; 2230 (void)args; 2231 if (error_is_set(errp)) { 2232 goto out; 2233 } 2234 retval = qmp_query_migrate_cache_size(errp); 2235 if (!error_is_set(errp)) { 2236 qmp_marshal_output_query_migrate_cache_size(retval, ret, errp); 2237 } 2238 2239 out: 2240 2241 2242 if (local_err) { 2243 qerror_report_err(local_err); 2244 error_free(local_err); 2245 return -1; 2246 } 2247 return 0; 2248 } 2249 2250 static void qmp_marshal_output_qom_list(ObjectPropertyInfoList * ret_in, QObject **ret_out, Error **errp) 2251 { 2252 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 2253 QmpOutputVisitor *mo = qmp_output_visitor_new(); 2254 Visitor *v; 2255 2256 v = qmp_output_get_visitor(mo); 2257 visit_type_ObjectPropertyInfoList(v, &ret_in, "unused", errp); 2258 if (!error_is_set(errp)) { 2259 *ret_out = qmp_output_get_qobject(mo); 2260 } 2261 qmp_output_visitor_cleanup(mo); 2262 v = qapi_dealloc_get_visitor(md); 2263 visit_type_ObjectPropertyInfoList(v, &ret_in, "unused", NULL); 2264 qapi_dealloc_visitor_cleanup(md); 2265 } 2266 2267 int qmp_marshal_input_qom_list(Monitor *mon, const QDict *qdict, QObject **ret) 2268 { 2269 Error *local_err = NULL; 2270 Error **errp = &local_err; 2271 QDict *args = (QDict *)qdict; 2272 ObjectPropertyInfoList * retval = NULL; 2273 QmpInputVisitor *mi; 2274 QapiDeallocVisitor *md; 2275 Visitor *v; 2276 char * path = NULL; 2277 2278 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2279 v = qmp_input_get_visitor(mi); 2280 visit_type_str(v, &path, "path", errp); 2281 qmp_input_visitor_cleanup(mi); 2282 2283 if (error_is_set(errp)) { 2284 goto out; 2285 } 2286 retval = qmp_qom_list(path, errp); 2287 if (!error_is_set(errp)) { 2288 qmp_marshal_output_qom_list(retval, ret, errp); 2289 } 2290 2291 out: 2292 md = qapi_dealloc_visitor_new(); 2293 v = qapi_dealloc_get_visitor(md); 2294 visit_type_str(v, &path, "path", NULL); 2295 qapi_dealloc_visitor_cleanup(md); 2296 2297 if (local_err) { 2298 qerror_report_err(local_err); 2299 error_free(local_err); 2300 return -1; 2301 } 2302 return 0; 2303 } 2304 2305 int qmp_marshal_input_set_password(Monitor *mon, const QDict *qdict, QObject **ret) 2306 { 2307 Error *local_err = NULL; 2308 Error **errp = &local_err; 2309 QDict *args = (QDict *)qdict; 2310 QmpInputVisitor *mi; 2311 QapiDeallocVisitor *md; 2312 Visitor *v; 2313 char * protocol = NULL; 2314 char * password = NULL; 2315 bool has_connected = false; 2316 char * connected = NULL; 2317 2318 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2319 v = qmp_input_get_visitor(mi); 2320 visit_type_str(v, &protocol, "protocol", errp); 2321 visit_type_str(v, &password, "password", errp); 2322 visit_start_optional(v, &has_connected, "connected", errp); 2323 if (has_connected) { 2324 visit_type_str(v, &connected, "connected", errp); 2325 } 2326 visit_end_optional(v, errp); 2327 qmp_input_visitor_cleanup(mi); 2328 2329 if (error_is_set(errp)) { 2330 goto out; 2331 } 2332 qmp_set_password(protocol, password, has_connected, connected, errp); 2333 2334 out: 2335 md = qapi_dealloc_visitor_new(); 2336 v = qapi_dealloc_get_visitor(md); 2337 visit_type_str(v, &protocol, "protocol", NULL); 2338 visit_type_str(v, &password, "password", NULL); 2339 visit_start_optional(v, &has_connected, "connected", NULL); 2340 if (has_connected) { 2341 visit_type_str(v, &connected, "connected", NULL); 2342 } 2343 visit_end_optional(v, NULL); 2344 qapi_dealloc_visitor_cleanup(md); 2345 2346 if (local_err) { 2347 qerror_report_err(local_err); 2348 error_free(local_err); 2349 return -1; 2350 } 2351 return 0; 2352 } 2353 2354 int qmp_marshal_input_expire_password(Monitor *mon, const QDict *qdict, QObject **ret) 2355 { 2356 Error *local_err = NULL; 2357 Error **errp = &local_err; 2358 QDict *args = (QDict *)qdict; 2359 QmpInputVisitor *mi; 2360 QapiDeallocVisitor *md; 2361 Visitor *v; 2362 char * protocol = NULL; 2363 char * time = NULL; 2364 2365 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2366 v = qmp_input_get_visitor(mi); 2367 visit_type_str(v, &protocol, "protocol", errp); 2368 visit_type_str(v, &time, "time", errp); 2369 qmp_input_visitor_cleanup(mi); 2370 2371 if (error_is_set(errp)) { 2372 goto out; 2373 } 2374 qmp_expire_password(protocol, time, errp); 2375 2376 out: 2377 md = qapi_dealloc_visitor_new(); 2378 v = qapi_dealloc_get_visitor(md); 2379 visit_type_str(v, &protocol, "protocol", NULL); 2380 visit_type_str(v, &time, "time", NULL); 2381 qapi_dealloc_visitor_cleanup(md); 2382 2383 if (local_err) { 2384 qerror_report_err(local_err); 2385 error_free(local_err); 2386 return -1; 2387 } 2388 return 0; 2389 } 2390 2391 int qmp_marshal_input_eject(Monitor *mon, const QDict *qdict, QObject **ret) 2392 { 2393 Error *local_err = NULL; 2394 Error **errp = &local_err; 2395 QDict *args = (QDict *)qdict; 2396 QmpInputVisitor *mi; 2397 QapiDeallocVisitor *md; 2398 Visitor *v; 2399 char * device = NULL; 2400 bool has_force = false; 2401 bool force; 2402 2403 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2404 v = qmp_input_get_visitor(mi); 2405 visit_type_str(v, &device, "device", errp); 2406 visit_start_optional(v, &has_force, "force", errp); 2407 if (has_force) { 2408 visit_type_bool(v, &force, "force", errp); 2409 } 2410 visit_end_optional(v, errp); 2411 qmp_input_visitor_cleanup(mi); 2412 2413 if (error_is_set(errp)) { 2414 goto out; 2415 } 2416 qmp_eject(device, has_force, force, errp); 2417 2418 out: 2419 md = qapi_dealloc_visitor_new(); 2420 v = qapi_dealloc_get_visitor(md); 2421 visit_type_str(v, &device, "device", NULL); 2422 visit_start_optional(v, &has_force, "force", NULL); 2423 if (has_force) { 2424 visit_type_bool(v, &force, "force", NULL); 2425 } 2426 visit_end_optional(v, NULL); 2427 qapi_dealloc_visitor_cleanup(md); 2428 2429 if (local_err) { 2430 qerror_report_err(local_err); 2431 error_free(local_err); 2432 return -1; 2433 } 2434 return 0; 2435 } 2436 2437 int qmp_marshal_input_change_vnc_password(Monitor *mon, const QDict *qdict, QObject **ret) 2438 { 2439 Error *local_err = NULL; 2440 Error **errp = &local_err; 2441 QDict *args = (QDict *)qdict; 2442 QmpInputVisitor *mi; 2443 QapiDeallocVisitor *md; 2444 Visitor *v; 2445 char * password = NULL; 2446 2447 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2448 v = qmp_input_get_visitor(mi); 2449 visit_type_str(v, &password, "password", errp); 2450 qmp_input_visitor_cleanup(mi); 2451 2452 if (error_is_set(errp)) { 2453 goto out; 2454 } 2455 qmp_change_vnc_password(password, errp); 2456 2457 out: 2458 md = qapi_dealloc_visitor_new(); 2459 v = qapi_dealloc_get_visitor(md); 2460 visit_type_str(v, &password, "password", NULL); 2461 qapi_dealloc_visitor_cleanup(md); 2462 2463 if (local_err) { 2464 qerror_report_err(local_err); 2465 error_free(local_err); 2466 return -1; 2467 } 2468 return 0; 2469 } 2470 2471 int qmp_marshal_input_change(Monitor *mon, const QDict *qdict, QObject **ret) 2472 { 2473 Error *local_err = NULL; 2474 Error **errp = &local_err; 2475 QDict *args = (QDict *)qdict; 2476 QmpInputVisitor *mi; 2477 QapiDeallocVisitor *md; 2478 Visitor *v; 2479 char * device = NULL; 2480 char * target = NULL; 2481 bool has_arg = false; 2482 char * arg = NULL; 2483 2484 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2485 v = qmp_input_get_visitor(mi); 2486 visit_type_str(v, &device, "device", errp); 2487 visit_type_str(v, &target, "target", errp); 2488 visit_start_optional(v, &has_arg, "arg", errp); 2489 if (has_arg) { 2490 visit_type_str(v, &arg, "arg", errp); 2491 } 2492 visit_end_optional(v, errp); 2493 qmp_input_visitor_cleanup(mi); 2494 2495 if (error_is_set(errp)) { 2496 goto out; 2497 } 2498 qmp_change(device, target, has_arg, arg, errp); 2499 2500 out: 2501 md = qapi_dealloc_visitor_new(); 2502 v = qapi_dealloc_get_visitor(md); 2503 visit_type_str(v, &device, "device", NULL); 2504 visit_type_str(v, &target, "target", NULL); 2505 visit_start_optional(v, &has_arg, "arg", NULL); 2506 if (has_arg) { 2507 visit_type_str(v, &arg, "arg", NULL); 2508 } 2509 visit_end_optional(v, NULL); 2510 qapi_dealloc_visitor_cleanup(md); 2511 2512 if (local_err) { 2513 qerror_report_err(local_err); 2514 error_free(local_err); 2515 return -1; 2516 } 2517 return 0; 2518 } 2519 2520 int qmp_marshal_input_block_set_io_throttle(Monitor *mon, const QDict *qdict, QObject **ret) 2521 { 2522 Error *local_err = NULL; 2523 Error **errp = &local_err; 2524 QDict *args = (QDict *)qdict; 2525 QmpInputVisitor *mi; 2526 QapiDeallocVisitor *md; 2527 Visitor *v; 2528 char * device = NULL; 2529 int64_t bps; 2530 int64_t bps_rd; 2531 int64_t bps_wr; 2532 int64_t iops; 2533 int64_t iops_rd; 2534 int64_t iops_wr; 2535 bool has_bps_max = false; 2536 int64_t bps_max; 2537 bool has_bps_rd_max = false; 2538 int64_t bps_rd_max; 2539 bool has_bps_wr_max = false; 2540 int64_t bps_wr_max; 2541 bool has_iops_max = false; 2542 int64_t iops_max; 2543 bool has_iops_rd_max = false; 2544 int64_t iops_rd_max; 2545 bool has_iops_wr_max = false; 2546 int64_t iops_wr_max; 2547 bool has_iops_size = false; 2548 int64_t iops_size; 2549 2550 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2551 v = qmp_input_get_visitor(mi); 2552 visit_type_str(v, &device, "device", errp); 2553 visit_type_int(v, &bps, "bps", errp); 2554 visit_type_int(v, &bps_rd, "bps_rd", errp); 2555 visit_type_int(v, &bps_wr, "bps_wr", errp); 2556 visit_type_int(v, &iops, "iops", errp); 2557 visit_type_int(v, &iops_rd, "iops_rd", errp); 2558 visit_type_int(v, &iops_wr, "iops_wr", errp); 2559 visit_start_optional(v, &has_bps_max, "bps_max", errp); 2560 if (has_bps_max) { 2561 visit_type_int(v, &bps_max, "bps_max", errp); 2562 } 2563 visit_end_optional(v, errp); 2564 visit_start_optional(v, &has_bps_rd_max, "bps_rd_max", errp); 2565 if (has_bps_rd_max) { 2566 visit_type_int(v, &bps_rd_max, "bps_rd_max", errp); 2567 } 2568 visit_end_optional(v, errp); 2569 visit_start_optional(v, &has_bps_wr_max, "bps_wr_max", errp); 2570 if (has_bps_wr_max) { 2571 visit_type_int(v, &bps_wr_max, "bps_wr_max", errp); 2572 } 2573 visit_end_optional(v, errp); 2574 visit_start_optional(v, &has_iops_max, "iops_max", errp); 2575 if (has_iops_max) { 2576 visit_type_int(v, &iops_max, "iops_max", errp); 2577 } 2578 visit_end_optional(v, errp); 2579 visit_start_optional(v, &has_iops_rd_max, "iops_rd_max", errp); 2580 if (has_iops_rd_max) { 2581 visit_type_int(v, &iops_rd_max, "iops_rd_max", errp); 2582 } 2583 visit_end_optional(v, errp); 2584 visit_start_optional(v, &has_iops_wr_max, "iops_wr_max", errp); 2585 if (has_iops_wr_max) { 2586 visit_type_int(v, &iops_wr_max, "iops_wr_max", errp); 2587 } 2588 visit_end_optional(v, errp); 2589 visit_start_optional(v, &has_iops_size, "iops_size", errp); 2590 if (has_iops_size) { 2591 visit_type_int(v, &iops_size, "iops_size", errp); 2592 } 2593 visit_end_optional(v, errp); 2594 qmp_input_visitor_cleanup(mi); 2595 2596 if (error_is_set(errp)) { 2597 goto out; 2598 } 2599 qmp_block_set_io_throttle(device, bps, bps_rd, bps_wr, iops, iops_rd, iops_wr, has_bps_max, bps_max, has_bps_rd_max, bps_rd_max, has_bps_wr_max, bps_wr_max, has_iops_max, iops_max, has_iops_rd_max, iops_rd_max, has_iops_wr_max, iops_wr_max, has_iops_size, iops_size, errp); 2600 2601 out: 2602 md = qapi_dealloc_visitor_new(); 2603 v = qapi_dealloc_get_visitor(md); 2604 visit_type_str(v, &device, "device", NULL); 2605 visit_type_int(v, &bps, "bps", NULL); 2606 visit_type_int(v, &bps_rd, "bps_rd", NULL); 2607 visit_type_int(v, &bps_wr, "bps_wr", NULL); 2608 visit_type_int(v, &iops, "iops", NULL); 2609 visit_type_int(v, &iops_rd, "iops_rd", NULL); 2610 visit_type_int(v, &iops_wr, "iops_wr", NULL); 2611 visit_start_optional(v, &has_bps_max, "bps_max", NULL); 2612 if (has_bps_max) { 2613 visit_type_int(v, &bps_max, "bps_max", NULL); 2614 } 2615 visit_end_optional(v, NULL); 2616 visit_start_optional(v, &has_bps_rd_max, "bps_rd_max", NULL); 2617 if (has_bps_rd_max) { 2618 visit_type_int(v, &bps_rd_max, "bps_rd_max", NULL); 2619 } 2620 visit_end_optional(v, NULL); 2621 visit_start_optional(v, &has_bps_wr_max, "bps_wr_max", NULL); 2622 if (has_bps_wr_max) { 2623 visit_type_int(v, &bps_wr_max, "bps_wr_max", NULL); 2624 } 2625 visit_end_optional(v, NULL); 2626 visit_start_optional(v, &has_iops_max, "iops_max", NULL); 2627 if (has_iops_max) { 2628 visit_type_int(v, &iops_max, "iops_max", NULL); 2629 } 2630 visit_end_optional(v, NULL); 2631 visit_start_optional(v, &has_iops_rd_max, "iops_rd_max", NULL); 2632 if (has_iops_rd_max) { 2633 visit_type_int(v, &iops_rd_max, "iops_rd_max", NULL); 2634 } 2635 visit_end_optional(v, NULL); 2636 visit_start_optional(v, &has_iops_wr_max, "iops_wr_max", NULL); 2637 if (has_iops_wr_max) { 2638 visit_type_int(v, &iops_wr_max, "iops_wr_max", NULL); 2639 } 2640 visit_end_optional(v, NULL); 2641 visit_start_optional(v, &has_iops_size, "iops_size", NULL); 2642 if (has_iops_size) { 2643 visit_type_int(v, &iops_size, "iops_size", NULL); 2644 } 2645 visit_end_optional(v, NULL); 2646 qapi_dealloc_visitor_cleanup(md); 2647 2648 if (local_err) { 2649 qerror_report_err(local_err); 2650 error_free(local_err); 2651 return -1; 2652 } 2653 return 0; 2654 } 2655 2656 int qmp_marshal_input_block_stream(Monitor *mon, const QDict *qdict, QObject **ret) 2657 { 2658 Error *local_err = NULL; 2659 Error **errp = &local_err; 2660 QDict *args = (QDict *)qdict; 2661 QmpInputVisitor *mi; 2662 QapiDeallocVisitor *md; 2663 Visitor *v; 2664 char * device = NULL; 2665 bool has_base = false; 2666 char * base = NULL; 2667 bool has_speed = false; 2668 int64_t speed; 2669 bool has_on_error = false; 2670 BlockdevOnError on_error; 2671 2672 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2673 v = qmp_input_get_visitor(mi); 2674 visit_type_str(v, &device, "device", errp); 2675 visit_start_optional(v, &has_base, "base", errp); 2676 if (has_base) { 2677 visit_type_str(v, &base, "base", errp); 2678 } 2679 visit_end_optional(v, errp); 2680 visit_start_optional(v, &has_speed, "speed", errp); 2681 if (has_speed) { 2682 visit_type_int(v, &speed, "speed", errp); 2683 } 2684 visit_end_optional(v, errp); 2685 visit_start_optional(v, &has_on_error, "on-error", errp); 2686 if (has_on_error) { 2687 visit_type_BlockdevOnError(v, &on_error, "on-error", errp); 2688 } 2689 visit_end_optional(v, errp); 2690 qmp_input_visitor_cleanup(mi); 2691 2692 if (error_is_set(errp)) { 2693 goto out; 2694 } 2695 qmp_block_stream(device, has_base, base, has_speed, speed, has_on_error, on_error, errp); 2696 2697 out: 2698 md = qapi_dealloc_visitor_new(); 2699 v = qapi_dealloc_get_visitor(md); 2700 visit_type_str(v, &device, "device", NULL); 2701 visit_start_optional(v, &has_base, "base", NULL); 2702 if (has_base) { 2703 visit_type_str(v, &base, "base", NULL); 2704 } 2705 visit_end_optional(v, NULL); 2706 visit_start_optional(v, &has_speed, "speed", NULL); 2707 if (has_speed) { 2708 visit_type_int(v, &speed, "speed", NULL); 2709 } 2710 visit_end_optional(v, NULL); 2711 visit_start_optional(v, &has_on_error, "on-error", NULL); 2712 if (has_on_error) { 2713 visit_type_BlockdevOnError(v, &on_error, "on-error", NULL); 2714 } 2715 visit_end_optional(v, NULL); 2716 qapi_dealloc_visitor_cleanup(md); 2717 2718 if (local_err) { 2719 qerror_report_err(local_err); 2720 error_free(local_err); 2721 return -1; 2722 } 2723 return 0; 2724 } 2725 2726 int qmp_marshal_input_block_job_set_speed(Monitor *mon, const QDict *qdict, QObject **ret) 2727 { 2728 Error *local_err = NULL; 2729 Error **errp = &local_err; 2730 QDict *args = (QDict *)qdict; 2731 QmpInputVisitor *mi; 2732 QapiDeallocVisitor *md; 2733 Visitor *v; 2734 char * device = NULL; 2735 int64_t speed; 2736 2737 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2738 v = qmp_input_get_visitor(mi); 2739 visit_type_str(v, &device, "device", errp); 2740 visit_type_int(v, &speed, "speed", errp); 2741 qmp_input_visitor_cleanup(mi); 2742 2743 if (error_is_set(errp)) { 2744 goto out; 2745 } 2746 qmp_block_job_set_speed(device, speed, errp); 2747 2748 out: 2749 md = qapi_dealloc_visitor_new(); 2750 v = qapi_dealloc_get_visitor(md); 2751 visit_type_str(v, &device, "device", NULL); 2752 visit_type_int(v, &speed, "speed", NULL); 2753 qapi_dealloc_visitor_cleanup(md); 2754 2755 if (local_err) { 2756 qerror_report_err(local_err); 2757 error_free(local_err); 2758 return -1; 2759 } 2760 return 0; 2761 } 2762 2763 int qmp_marshal_input_block_job_cancel(Monitor *mon, const QDict *qdict, QObject **ret) 2764 { 2765 Error *local_err = NULL; 2766 Error **errp = &local_err; 2767 QDict *args = (QDict *)qdict; 2768 QmpInputVisitor *mi; 2769 QapiDeallocVisitor *md; 2770 Visitor *v; 2771 char * device = NULL; 2772 bool has_force = false; 2773 bool force; 2774 2775 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2776 v = qmp_input_get_visitor(mi); 2777 visit_type_str(v, &device, "device", errp); 2778 visit_start_optional(v, &has_force, "force", errp); 2779 if (has_force) { 2780 visit_type_bool(v, &force, "force", errp); 2781 } 2782 visit_end_optional(v, errp); 2783 qmp_input_visitor_cleanup(mi); 2784 2785 if (error_is_set(errp)) { 2786 goto out; 2787 } 2788 qmp_block_job_cancel(device, has_force, force, errp); 2789 2790 out: 2791 md = qapi_dealloc_visitor_new(); 2792 v = qapi_dealloc_get_visitor(md); 2793 visit_type_str(v, &device, "device", NULL); 2794 visit_start_optional(v, &has_force, "force", NULL); 2795 if (has_force) { 2796 visit_type_bool(v, &force, "force", NULL); 2797 } 2798 visit_end_optional(v, NULL); 2799 qapi_dealloc_visitor_cleanup(md); 2800 2801 if (local_err) { 2802 qerror_report_err(local_err); 2803 error_free(local_err); 2804 return -1; 2805 } 2806 return 0; 2807 } 2808 2809 int qmp_marshal_input_block_job_pause(Monitor *mon, const QDict *qdict, QObject **ret) 2810 { 2811 Error *local_err = NULL; 2812 Error **errp = &local_err; 2813 QDict *args = (QDict *)qdict; 2814 QmpInputVisitor *mi; 2815 QapiDeallocVisitor *md; 2816 Visitor *v; 2817 char * device = NULL; 2818 2819 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2820 v = qmp_input_get_visitor(mi); 2821 visit_type_str(v, &device, "device", errp); 2822 qmp_input_visitor_cleanup(mi); 2823 2824 if (error_is_set(errp)) { 2825 goto out; 2826 } 2827 qmp_block_job_pause(device, errp); 2828 2829 out: 2830 md = qapi_dealloc_visitor_new(); 2831 v = qapi_dealloc_get_visitor(md); 2832 visit_type_str(v, &device, "device", NULL); 2833 qapi_dealloc_visitor_cleanup(md); 2834 2835 if (local_err) { 2836 qerror_report_err(local_err); 2837 error_free(local_err); 2838 return -1; 2839 } 2840 return 0; 2841 } 2842 2843 int qmp_marshal_input_block_job_resume(Monitor *mon, const QDict *qdict, QObject **ret) 2844 { 2845 Error *local_err = NULL; 2846 Error **errp = &local_err; 2847 QDict *args = (QDict *)qdict; 2848 QmpInputVisitor *mi; 2849 QapiDeallocVisitor *md; 2850 Visitor *v; 2851 char * device = NULL; 2852 2853 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2854 v = qmp_input_get_visitor(mi); 2855 visit_type_str(v, &device, "device", errp); 2856 qmp_input_visitor_cleanup(mi); 2857 2858 if (error_is_set(errp)) { 2859 goto out; 2860 } 2861 qmp_block_job_resume(device, errp); 2862 2863 out: 2864 md = qapi_dealloc_visitor_new(); 2865 v = qapi_dealloc_get_visitor(md); 2866 visit_type_str(v, &device, "device", NULL); 2867 qapi_dealloc_visitor_cleanup(md); 2868 2869 if (local_err) { 2870 qerror_report_err(local_err); 2871 error_free(local_err); 2872 return -1; 2873 } 2874 return 0; 2875 } 2876 2877 int qmp_marshal_input_block_job_complete(Monitor *mon, const QDict *qdict, QObject **ret) 2878 { 2879 Error *local_err = NULL; 2880 Error **errp = &local_err; 2881 QDict *args = (QDict *)qdict; 2882 QmpInputVisitor *mi; 2883 QapiDeallocVisitor *md; 2884 Visitor *v; 2885 char * device = NULL; 2886 2887 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2888 v = qmp_input_get_visitor(mi); 2889 visit_type_str(v, &device, "device", errp); 2890 qmp_input_visitor_cleanup(mi); 2891 2892 if (error_is_set(errp)) { 2893 goto out; 2894 } 2895 qmp_block_job_complete(device, errp); 2896 2897 out: 2898 md = qapi_dealloc_visitor_new(); 2899 v = qapi_dealloc_get_visitor(md); 2900 visit_type_str(v, &device, "device", NULL); 2901 qapi_dealloc_visitor_cleanup(md); 2902 2903 if (local_err) { 2904 qerror_report_err(local_err); 2905 error_free(local_err); 2906 return -1; 2907 } 2908 return 0; 2909 } 2910 2911 static void qmp_marshal_output_qom_list_types(ObjectTypeInfoList * ret_in, QObject **ret_out, Error **errp) 2912 { 2913 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 2914 QmpOutputVisitor *mo = qmp_output_visitor_new(); 2915 Visitor *v; 2916 2917 v = qmp_output_get_visitor(mo); 2918 visit_type_ObjectTypeInfoList(v, &ret_in, "unused", errp); 2919 if (!error_is_set(errp)) { 2920 *ret_out = qmp_output_get_qobject(mo); 2921 } 2922 qmp_output_visitor_cleanup(mo); 2923 v = qapi_dealloc_get_visitor(md); 2924 visit_type_ObjectTypeInfoList(v, &ret_in, "unused", NULL); 2925 qapi_dealloc_visitor_cleanup(md); 2926 } 2927 2928 int qmp_marshal_input_qom_list_types(Monitor *mon, const QDict *qdict, QObject **ret) 2929 { 2930 Error *local_err = NULL; 2931 Error **errp = &local_err; 2932 QDict *args = (QDict *)qdict; 2933 ObjectTypeInfoList * retval = NULL; 2934 QmpInputVisitor *mi; 2935 QapiDeallocVisitor *md; 2936 Visitor *v; 2937 bool has_implements = false; 2938 char * implements = NULL; 2939 bool has_abstract = false; 2940 bool abstract; 2941 2942 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 2943 v = qmp_input_get_visitor(mi); 2944 visit_start_optional(v, &has_implements, "implements", errp); 2945 if (has_implements) { 2946 visit_type_str(v, &implements, "implements", errp); 2947 } 2948 visit_end_optional(v, errp); 2949 visit_start_optional(v, &has_abstract, "abstract", errp); 2950 if (has_abstract) { 2951 visit_type_bool(v, &abstract, "abstract", errp); 2952 } 2953 visit_end_optional(v, errp); 2954 qmp_input_visitor_cleanup(mi); 2955 2956 if (error_is_set(errp)) { 2957 goto out; 2958 } 2959 retval = qmp_qom_list_types(has_implements, implements, has_abstract, abstract, errp); 2960 if (!error_is_set(errp)) { 2961 qmp_marshal_output_qom_list_types(retval, ret, errp); 2962 } 2963 2964 out: 2965 md = qapi_dealloc_visitor_new(); 2966 v = qapi_dealloc_get_visitor(md); 2967 visit_start_optional(v, &has_implements, "implements", NULL); 2968 if (has_implements) { 2969 visit_type_str(v, &implements, "implements", NULL); 2970 } 2971 visit_end_optional(v, NULL); 2972 visit_start_optional(v, &has_abstract, "abstract", NULL); 2973 if (has_abstract) { 2974 visit_type_bool(v, &abstract, "abstract", NULL); 2975 } 2976 visit_end_optional(v, NULL); 2977 qapi_dealloc_visitor_cleanup(md); 2978 2979 if (local_err) { 2980 qerror_report_err(local_err); 2981 error_free(local_err); 2982 return -1; 2983 } 2984 return 0; 2985 } 2986 2987 static void qmp_marshal_output_device_list_properties(DevicePropertyInfoList * ret_in, QObject **ret_out, Error **errp) 2988 { 2989 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 2990 QmpOutputVisitor *mo = qmp_output_visitor_new(); 2991 Visitor *v; 2992 2993 v = qmp_output_get_visitor(mo); 2994 visit_type_DevicePropertyInfoList(v, &ret_in, "unused", errp); 2995 if (!error_is_set(errp)) { 2996 *ret_out = qmp_output_get_qobject(mo); 2997 } 2998 qmp_output_visitor_cleanup(mo); 2999 v = qapi_dealloc_get_visitor(md); 3000 visit_type_DevicePropertyInfoList(v, &ret_in, "unused", NULL); 3001 qapi_dealloc_visitor_cleanup(md); 3002 } 3003 3004 int qmp_marshal_input_device_list_properties(Monitor *mon, const QDict *qdict, QObject **ret) 3005 { 3006 Error *local_err = NULL; 3007 Error **errp = &local_err; 3008 QDict *args = (QDict *)qdict; 3009 DevicePropertyInfoList * retval = NULL; 3010 QmpInputVisitor *mi; 3011 QapiDeallocVisitor *md; 3012 Visitor *v; 3013 char * q_typename = NULL; 3014 3015 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3016 v = qmp_input_get_visitor(mi); 3017 visit_type_str(v, &q_typename, "typename", errp); 3018 qmp_input_visitor_cleanup(mi); 3019 3020 if (error_is_set(errp)) { 3021 goto out; 3022 } 3023 retval = qmp_device_list_properties(q_typename, errp); 3024 if (!error_is_set(errp)) { 3025 qmp_marshal_output_device_list_properties(retval, ret, errp); 3026 } 3027 3028 out: 3029 md = qapi_dealloc_visitor_new(); 3030 v = qapi_dealloc_get_visitor(md); 3031 visit_type_str(v, &q_typename, "typename", NULL); 3032 qapi_dealloc_visitor_cleanup(md); 3033 3034 if (local_err) { 3035 qerror_report_err(local_err); 3036 error_free(local_err); 3037 return -1; 3038 } 3039 return 0; 3040 } 3041 3042 int qmp_marshal_input_migrate(Monitor *mon, const QDict *qdict, QObject **ret) 3043 { 3044 Error *local_err = NULL; 3045 Error **errp = &local_err; 3046 QDict *args = (QDict *)qdict; 3047 QmpInputVisitor *mi; 3048 QapiDeallocVisitor *md; 3049 Visitor *v; 3050 char * uri = NULL; 3051 bool has_blk = false; 3052 bool blk; 3053 bool has_inc = false; 3054 bool inc; 3055 bool has_detach = false; 3056 bool detach; 3057 3058 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3059 v = qmp_input_get_visitor(mi); 3060 visit_type_str(v, &uri, "uri", errp); 3061 visit_start_optional(v, &has_blk, "blk", errp); 3062 if (has_blk) { 3063 visit_type_bool(v, &blk, "blk", errp); 3064 } 3065 visit_end_optional(v, errp); 3066 visit_start_optional(v, &has_inc, "inc", errp); 3067 if (has_inc) { 3068 visit_type_bool(v, &inc, "inc", errp); 3069 } 3070 visit_end_optional(v, errp); 3071 visit_start_optional(v, &has_detach, "detach", errp); 3072 if (has_detach) { 3073 visit_type_bool(v, &detach, "detach", errp); 3074 } 3075 visit_end_optional(v, errp); 3076 qmp_input_visitor_cleanup(mi); 3077 3078 if (error_is_set(errp)) { 3079 goto out; 3080 } 3081 qmp_migrate(uri, has_blk, blk, has_inc, inc, has_detach, detach, errp); 3082 3083 out: 3084 md = qapi_dealloc_visitor_new(); 3085 v = qapi_dealloc_get_visitor(md); 3086 visit_type_str(v, &uri, "uri", NULL); 3087 visit_start_optional(v, &has_blk, "blk", NULL); 3088 if (has_blk) { 3089 visit_type_bool(v, &blk, "blk", NULL); 3090 } 3091 visit_end_optional(v, NULL); 3092 visit_start_optional(v, &has_inc, "inc", NULL); 3093 if (has_inc) { 3094 visit_type_bool(v, &inc, "inc", NULL); 3095 } 3096 visit_end_optional(v, NULL); 3097 visit_start_optional(v, &has_detach, "detach", NULL); 3098 if (has_detach) { 3099 visit_type_bool(v, &detach, "detach", NULL); 3100 } 3101 visit_end_optional(v, NULL); 3102 qapi_dealloc_visitor_cleanup(md); 3103 3104 if (local_err) { 3105 qerror_report_err(local_err); 3106 error_free(local_err); 3107 return -1; 3108 } 3109 return 0; 3110 } 3111 3112 int qmp_marshal_input_xen_save_devices_state(Monitor *mon, const QDict *qdict, QObject **ret) 3113 { 3114 Error *local_err = NULL; 3115 Error **errp = &local_err; 3116 QDict *args = (QDict *)qdict; 3117 QmpInputVisitor *mi; 3118 QapiDeallocVisitor *md; 3119 Visitor *v; 3120 char * filename = NULL; 3121 3122 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3123 v = qmp_input_get_visitor(mi); 3124 visit_type_str(v, &filename, "filename", errp); 3125 qmp_input_visitor_cleanup(mi); 3126 3127 if (error_is_set(errp)) { 3128 goto out; 3129 } 3130 qmp_xen_save_devices_state(filename, errp); 3131 3132 out: 3133 md = qapi_dealloc_visitor_new(); 3134 v = qapi_dealloc_get_visitor(md); 3135 visit_type_str(v, &filename, "filename", NULL); 3136 qapi_dealloc_visitor_cleanup(md); 3137 3138 if (local_err) { 3139 qerror_report_err(local_err); 3140 error_free(local_err); 3141 return -1; 3142 } 3143 return 0; 3144 } 3145 3146 int qmp_marshal_input_xen_set_global_dirty_log(Monitor *mon, const QDict *qdict, QObject **ret) 3147 { 3148 Error *local_err = NULL; 3149 Error **errp = &local_err; 3150 QDict *args = (QDict *)qdict; 3151 QmpInputVisitor *mi; 3152 QapiDeallocVisitor *md; 3153 Visitor *v; 3154 bool enable; 3155 3156 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3157 v = qmp_input_get_visitor(mi); 3158 visit_type_bool(v, &enable, "enable", errp); 3159 qmp_input_visitor_cleanup(mi); 3160 3161 if (error_is_set(errp)) { 3162 goto out; 3163 } 3164 qmp_xen_set_global_dirty_log(enable, errp); 3165 3166 out: 3167 md = qapi_dealloc_visitor_new(); 3168 v = qapi_dealloc_get_visitor(md); 3169 visit_type_bool(v, &enable, "enable", NULL); 3170 qapi_dealloc_visitor_cleanup(md); 3171 3172 if (local_err) { 3173 qerror_report_err(local_err); 3174 error_free(local_err); 3175 return -1; 3176 } 3177 return 0; 3178 } 3179 3180 int qmp_marshal_input_device_del(Monitor *mon, const QDict *qdict, QObject **ret) 3181 { 3182 Error *local_err = NULL; 3183 Error **errp = &local_err; 3184 QDict *args = (QDict *)qdict; 3185 QmpInputVisitor *mi; 3186 QapiDeallocVisitor *md; 3187 Visitor *v; 3188 char * id = NULL; 3189 3190 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3191 v = qmp_input_get_visitor(mi); 3192 visit_type_str(v, &id, "id", errp); 3193 qmp_input_visitor_cleanup(mi); 3194 3195 if (error_is_set(errp)) { 3196 goto out; 3197 } 3198 qmp_device_del(id, errp); 3199 3200 out: 3201 md = qapi_dealloc_visitor_new(); 3202 v = qapi_dealloc_get_visitor(md); 3203 visit_type_str(v, &id, "id", NULL); 3204 qapi_dealloc_visitor_cleanup(md); 3205 3206 if (local_err) { 3207 qerror_report_err(local_err); 3208 error_free(local_err); 3209 return -1; 3210 } 3211 return 0; 3212 } 3213 3214 int qmp_marshal_input_dump_guest_memory(Monitor *mon, const QDict *qdict, QObject **ret) 3215 { 3216 Error *local_err = NULL; 3217 Error **errp = &local_err; 3218 QDict *args = (QDict *)qdict; 3219 QmpInputVisitor *mi; 3220 QapiDeallocVisitor *md; 3221 Visitor *v; 3222 bool paging; 3223 char * protocol = NULL; 3224 bool has_begin = false; 3225 int64_t begin; 3226 bool has_length = false; 3227 int64_t length; 3228 3229 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3230 v = qmp_input_get_visitor(mi); 3231 visit_type_bool(v, &paging, "paging", errp); 3232 visit_type_str(v, &protocol, "protocol", errp); 3233 visit_start_optional(v, &has_begin, "begin", errp); 3234 if (has_begin) { 3235 visit_type_int(v, &begin, "begin", errp); 3236 } 3237 visit_end_optional(v, errp); 3238 visit_start_optional(v, &has_length, "length", errp); 3239 if (has_length) { 3240 visit_type_int(v, &length, "length", errp); 3241 } 3242 visit_end_optional(v, errp); 3243 qmp_input_visitor_cleanup(mi); 3244 3245 if (error_is_set(errp)) { 3246 goto out; 3247 } 3248 qmp_dump_guest_memory(paging, protocol, has_begin, begin, has_length, length, errp); 3249 3250 out: 3251 md = qapi_dealloc_visitor_new(); 3252 v = qapi_dealloc_get_visitor(md); 3253 visit_type_bool(v, &paging, "paging", NULL); 3254 visit_type_str(v, &protocol, "protocol", NULL); 3255 visit_start_optional(v, &has_begin, "begin", NULL); 3256 if (has_begin) { 3257 visit_type_int(v, &begin, "begin", NULL); 3258 } 3259 visit_end_optional(v, NULL); 3260 visit_start_optional(v, &has_length, "length", NULL); 3261 if (has_length) { 3262 visit_type_int(v, &length, "length", NULL); 3263 } 3264 visit_end_optional(v, NULL); 3265 qapi_dealloc_visitor_cleanup(md); 3266 3267 if (local_err) { 3268 qerror_report_err(local_err); 3269 error_free(local_err); 3270 return -1; 3271 } 3272 return 0; 3273 } 3274 3275 int qmp_marshal_input_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret) 3276 { 3277 Error *local_err = NULL; 3278 Error **errp = &local_err; 3279 QDict *args = (QDict *)qdict; 3280 QmpInputVisitor *mi; 3281 QapiDeallocVisitor *md; 3282 Visitor *v; 3283 char * id = NULL; 3284 3285 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3286 v = qmp_input_get_visitor(mi); 3287 visit_type_str(v, &id, "id", errp); 3288 qmp_input_visitor_cleanup(mi); 3289 3290 if (error_is_set(errp)) { 3291 goto out; 3292 } 3293 qmp_netdev_del(id, errp); 3294 3295 out: 3296 md = qapi_dealloc_visitor_new(); 3297 v = qapi_dealloc_get_visitor(md); 3298 visit_type_str(v, &id, "id", NULL); 3299 qapi_dealloc_visitor_cleanup(md); 3300 3301 if (local_err) { 3302 qerror_report_err(local_err); 3303 error_free(local_err); 3304 return -1; 3305 } 3306 return 0; 3307 } 3308 3309 int qmp_marshal_input_getfd(Monitor *mon, const QDict *qdict, QObject **ret) 3310 { 3311 Error *local_err = NULL; 3312 Error **errp = &local_err; 3313 QDict *args = (QDict *)qdict; 3314 QmpInputVisitor *mi; 3315 QapiDeallocVisitor *md; 3316 Visitor *v; 3317 char * fdname = NULL; 3318 3319 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3320 v = qmp_input_get_visitor(mi); 3321 visit_type_str(v, &fdname, "fdname", errp); 3322 qmp_input_visitor_cleanup(mi); 3323 3324 if (error_is_set(errp)) { 3325 goto out; 3326 } 3327 qmp_getfd(fdname, errp); 3328 3329 out: 3330 md = qapi_dealloc_visitor_new(); 3331 v = qapi_dealloc_get_visitor(md); 3332 visit_type_str(v, &fdname, "fdname", NULL); 3333 qapi_dealloc_visitor_cleanup(md); 3334 3335 if (local_err) { 3336 qerror_report_err(local_err); 3337 error_free(local_err); 3338 return -1; 3339 } 3340 return 0; 3341 } 3342 3343 int qmp_marshal_input_closefd(Monitor *mon, const QDict *qdict, QObject **ret) 3344 { 3345 Error *local_err = NULL; 3346 Error **errp = &local_err; 3347 QDict *args = (QDict *)qdict; 3348 QmpInputVisitor *mi; 3349 QapiDeallocVisitor *md; 3350 Visitor *v; 3351 char * fdname = NULL; 3352 3353 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3354 v = qmp_input_get_visitor(mi); 3355 visit_type_str(v, &fdname, "fdname", errp); 3356 qmp_input_visitor_cleanup(mi); 3357 3358 if (error_is_set(errp)) { 3359 goto out; 3360 } 3361 qmp_closefd(fdname, errp); 3362 3363 out: 3364 md = qapi_dealloc_visitor_new(); 3365 v = qapi_dealloc_get_visitor(md); 3366 visit_type_str(v, &fdname, "fdname", NULL); 3367 qapi_dealloc_visitor_cleanup(md); 3368 3369 if (local_err) { 3370 qerror_report_err(local_err); 3371 error_free(local_err); 3372 return -1; 3373 } 3374 return 0; 3375 } 3376 3377 static void qmp_marshal_output_query_machines(MachineInfoList * ret_in, QObject **ret_out, Error **errp) 3378 { 3379 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 3380 QmpOutputVisitor *mo = qmp_output_visitor_new(); 3381 Visitor *v; 3382 3383 v = qmp_output_get_visitor(mo); 3384 visit_type_MachineInfoList(v, &ret_in, "unused", errp); 3385 if (!error_is_set(errp)) { 3386 *ret_out = qmp_output_get_qobject(mo); 3387 } 3388 qmp_output_visitor_cleanup(mo); 3389 v = qapi_dealloc_get_visitor(md); 3390 visit_type_MachineInfoList(v, &ret_in, "unused", NULL); 3391 qapi_dealloc_visitor_cleanup(md); 3392 } 3393 3394 int qmp_marshal_input_query_machines(Monitor *mon, const QDict *qdict, QObject **ret) 3395 { 3396 Error *local_err = NULL; 3397 Error **errp = &local_err; 3398 QDict *args = (QDict *)qdict; 3399 MachineInfoList * retval = NULL; 3400 (void)args; 3401 if (error_is_set(errp)) { 3402 goto out; 3403 } 3404 retval = qmp_query_machines(errp); 3405 if (!error_is_set(errp)) { 3406 qmp_marshal_output_query_machines(retval, ret, errp); 3407 } 3408 3409 out: 3410 3411 3412 if (local_err) { 3413 qerror_report_err(local_err); 3414 error_free(local_err); 3415 return -1; 3416 } 3417 return 0; 3418 } 3419 3420 static void qmp_marshal_output_query_cpu_definitions(CpuDefinitionInfoList * ret_in, QObject **ret_out, Error **errp) 3421 { 3422 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 3423 QmpOutputVisitor *mo = qmp_output_visitor_new(); 3424 Visitor *v; 3425 3426 v = qmp_output_get_visitor(mo); 3427 visit_type_CpuDefinitionInfoList(v, &ret_in, "unused", errp); 3428 if (!error_is_set(errp)) { 3429 *ret_out = qmp_output_get_qobject(mo); 3430 } 3431 qmp_output_visitor_cleanup(mo); 3432 v = qapi_dealloc_get_visitor(md); 3433 visit_type_CpuDefinitionInfoList(v, &ret_in, "unused", NULL); 3434 qapi_dealloc_visitor_cleanup(md); 3435 } 3436 3437 int qmp_marshal_input_query_cpu_definitions(Monitor *mon, const QDict *qdict, QObject **ret) 3438 { 3439 Error *local_err = NULL; 3440 Error **errp = &local_err; 3441 QDict *args = (QDict *)qdict; 3442 CpuDefinitionInfoList * retval = NULL; 3443 (void)args; 3444 if (error_is_set(errp)) { 3445 goto out; 3446 } 3447 retval = qmp_query_cpu_definitions(errp); 3448 if (!error_is_set(errp)) { 3449 qmp_marshal_output_query_cpu_definitions(retval, ret, errp); 3450 } 3451 3452 out: 3453 3454 3455 if (local_err) { 3456 qerror_report_err(local_err); 3457 error_free(local_err); 3458 return -1; 3459 } 3460 return 0; 3461 } 3462 3463 static void qmp_marshal_output_add_fd(AddfdInfo * ret_in, QObject **ret_out, Error **errp) 3464 { 3465 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 3466 QmpOutputVisitor *mo = qmp_output_visitor_new(); 3467 Visitor *v; 3468 3469 v = qmp_output_get_visitor(mo); 3470 visit_type_AddfdInfo(v, &ret_in, "unused", errp); 3471 if (!error_is_set(errp)) { 3472 *ret_out = qmp_output_get_qobject(mo); 3473 } 3474 qmp_output_visitor_cleanup(mo); 3475 v = qapi_dealloc_get_visitor(md); 3476 visit_type_AddfdInfo(v, &ret_in, "unused", NULL); 3477 qapi_dealloc_visitor_cleanup(md); 3478 } 3479 3480 int qmp_marshal_input_add_fd(Monitor *mon, const QDict *qdict, QObject **ret) 3481 { 3482 Error *local_err = NULL; 3483 Error **errp = &local_err; 3484 QDict *args = (QDict *)qdict; 3485 AddfdInfo * retval = NULL; 3486 QmpInputVisitor *mi; 3487 QapiDeallocVisitor *md; 3488 Visitor *v; 3489 bool has_fdset_id = false; 3490 int64_t fdset_id; 3491 bool has_opaque = false; 3492 char * opaque = NULL; 3493 3494 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3495 v = qmp_input_get_visitor(mi); 3496 visit_start_optional(v, &has_fdset_id, "fdset-id", errp); 3497 if (has_fdset_id) { 3498 visit_type_int(v, &fdset_id, "fdset-id", errp); 3499 } 3500 visit_end_optional(v, errp); 3501 visit_start_optional(v, &has_opaque, "opaque", errp); 3502 if (has_opaque) { 3503 visit_type_str(v, &opaque, "opaque", errp); 3504 } 3505 visit_end_optional(v, errp); 3506 qmp_input_visitor_cleanup(mi); 3507 3508 if (error_is_set(errp)) { 3509 goto out; 3510 } 3511 retval = qmp_add_fd(has_fdset_id, fdset_id, has_opaque, opaque, errp); 3512 if (!error_is_set(errp)) { 3513 qmp_marshal_output_add_fd(retval, ret, errp); 3514 } 3515 3516 out: 3517 md = qapi_dealloc_visitor_new(); 3518 v = qapi_dealloc_get_visitor(md); 3519 visit_start_optional(v, &has_fdset_id, "fdset-id", NULL); 3520 if (has_fdset_id) { 3521 visit_type_int(v, &fdset_id, "fdset-id", NULL); 3522 } 3523 visit_end_optional(v, NULL); 3524 visit_start_optional(v, &has_opaque, "opaque", NULL); 3525 if (has_opaque) { 3526 visit_type_str(v, &opaque, "opaque", NULL); 3527 } 3528 visit_end_optional(v, NULL); 3529 qapi_dealloc_visitor_cleanup(md); 3530 3531 if (local_err) { 3532 qerror_report_err(local_err); 3533 error_free(local_err); 3534 return -1; 3535 } 3536 return 0; 3537 } 3538 3539 int qmp_marshal_input_remove_fd(Monitor *mon, const QDict *qdict, QObject **ret) 3540 { 3541 Error *local_err = NULL; 3542 Error **errp = &local_err; 3543 QDict *args = (QDict *)qdict; 3544 QmpInputVisitor *mi; 3545 QapiDeallocVisitor *md; 3546 Visitor *v; 3547 int64_t fdset_id; 3548 bool has_fd = false; 3549 int64_t fd; 3550 3551 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3552 v = qmp_input_get_visitor(mi); 3553 visit_type_int(v, &fdset_id, "fdset-id", errp); 3554 visit_start_optional(v, &has_fd, "fd", errp); 3555 if (has_fd) { 3556 visit_type_int(v, &fd, "fd", errp); 3557 } 3558 visit_end_optional(v, errp); 3559 qmp_input_visitor_cleanup(mi); 3560 3561 if (error_is_set(errp)) { 3562 goto out; 3563 } 3564 qmp_remove_fd(fdset_id, has_fd, fd, errp); 3565 3566 out: 3567 md = qapi_dealloc_visitor_new(); 3568 v = qapi_dealloc_get_visitor(md); 3569 visit_type_int(v, &fdset_id, "fdset-id", NULL); 3570 visit_start_optional(v, &has_fd, "fd", NULL); 3571 if (has_fd) { 3572 visit_type_int(v, &fd, "fd", NULL); 3573 } 3574 visit_end_optional(v, NULL); 3575 qapi_dealloc_visitor_cleanup(md); 3576 3577 if (local_err) { 3578 qerror_report_err(local_err); 3579 error_free(local_err); 3580 return -1; 3581 } 3582 return 0; 3583 } 3584 3585 static void qmp_marshal_output_query_fdsets(FdsetInfoList * ret_in, QObject **ret_out, Error **errp) 3586 { 3587 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 3588 QmpOutputVisitor *mo = qmp_output_visitor_new(); 3589 Visitor *v; 3590 3591 v = qmp_output_get_visitor(mo); 3592 visit_type_FdsetInfoList(v, &ret_in, "unused", errp); 3593 if (!error_is_set(errp)) { 3594 *ret_out = qmp_output_get_qobject(mo); 3595 } 3596 qmp_output_visitor_cleanup(mo); 3597 v = qapi_dealloc_get_visitor(md); 3598 visit_type_FdsetInfoList(v, &ret_in, "unused", NULL); 3599 qapi_dealloc_visitor_cleanup(md); 3600 } 3601 3602 int qmp_marshal_input_query_fdsets(Monitor *mon, const QDict *qdict, QObject **ret) 3603 { 3604 Error *local_err = NULL; 3605 Error **errp = &local_err; 3606 QDict *args = (QDict *)qdict; 3607 FdsetInfoList * retval = NULL; 3608 (void)args; 3609 if (error_is_set(errp)) { 3610 goto out; 3611 } 3612 retval = qmp_query_fdsets(errp); 3613 if (!error_is_set(errp)) { 3614 qmp_marshal_output_query_fdsets(retval, ret, errp); 3615 } 3616 3617 out: 3618 3619 3620 if (local_err) { 3621 qerror_report_err(local_err); 3622 error_free(local_err); 3623 return -1; 3624 } 3625 return 0; 3626 } 3627 3628 static void qmp_marshal_output_query_target(TargetInfo * ret_in, QObject **ret_out, Error **errp) 3629 { 3630 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 3631 QmpOutputVisitor *mo = qmp_output_visitor_new(); 3632 Visitor *v; 3633 3634 v = qmp_output_get_visitor(mo); 3635 visit_type_TargetInfo(v, &ret_in, "unused", errp); 3636 if (!error_is_set(errp)) { 3637 *ret_out = qmp_output_get_qobject(mo); 3638 } 3639 qmp_output_visitor_cleanup(mo); 3640 v = qapi_dealloc_get_visitor(md); 3641 visit_type_TargetInfo(v, &ret_in, "unused", NULL); 3642 qapi_dealloc_visitor_cleanup(md); 3643 } 3644 3645 int qmp_marshal_input_query_target(Monitor *mon, const QDict *qdict, QObject **ret) 3646 { 3647 Error *local_err = NULL; 3648 Error **errp = &local_err; 3649 QDict *args = (QDict *)qdict; 3650 TargetInfo * retval = NULL; 3651 (void)args; 3652 if (error_is_set(errp)) { 3653 goto out; 3654 } 3655 retval = qmp_query_target(errp); 3656 if (!error_is_set(errp)) { 3657 qmp_marshal_output_query_target(retval, ret, errp); 3658 } 3659 3660 out: 3661 3662 3663 if (local_err) { 3664 qerror_report_err(local_err); 3665 error_free(local_err); 3666 return -1; 3667 } 3668 return 0; 3669 } 3670 3671 int qmp_marshal_input_send_key(Monitor *mon, const QDict *qdict, QObject **ret) 3672 { 3673 Error *local_err = NULL; 3674 Error **errp = &local_err; 3675 QDict *args = (QDict *)qdict; 3676 QmpInputVisitor *mi; 3677 QapiDeallocVisitor *md; 3678 Visitor *v; 3679 KeyValueList * keys = NULL; 3680 bool has_hold_time = false; 3681 int64_t hold_time; 3682 3683 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3684 v = qmp_input_get_visitor(mi); 3685 visit_type_KeyValueList(v, &keys, "keys", errp); 3686 visit_start_optional(v, &has_hold_time, "hold-time", errp); 3687 if (has_hold_time) { 3688 visit_type_int(v, &hold_time, "hold-time", errp); 3689 } 3690 visit_end_optional(v, errp); 3691 qmp_input_visitor_cleanup(mi); 3692 3693 if (error_is_set(errp)) { 3694 goto out; 3695 } 3696 qmp_send_key(keys, has_hold_time, hold_time, errp); 3697 3698 out: 3699 md = qapi_dealloc_visitor_new(); 3700 v = qapi_dealloc_get_visitor(md); 3701 visit_type_KeyValueList(v, &keys, "keys", NULL); 3702 visit_start_optional(v, &has_hold_time, "hold-time", NULL); 3703 if (has_hold_time) { 3704 visit_type_int(v, &hold_time, "hold-time", NULL); 3705 } 3706 visit_end_optional(v, NULL); 3707 qapi_dealloc_visitor_cleanup(md); 3708 3709 if (local_err) { 3710 qerror_report_err(local_err); 3711 error_free(local_err); 3712 return -1; 3713 } 3714 return 0; 3715 } 3716 3717 int qmp_marshal_input_screendump(Monitor *mon, const QDict *qdict, QObject **ret) 3718 { 3719 Error *local_err = NULL; 3720 Error **errp = &local_err; 3721 QDict *args = (QDict *)qdict; 3722 QmpInputVisitor *mi; 3723 QapiDeallocVisitor *md; 3724 Visitor *v; 3725 char * filename = NULL; 3726 3727 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3728 v = qmp_input_get_visitor(mi); 3729 visit_type_str(v, &filename, "filename", errp); 3730 qmp_input_visitor_cleanup(mi); 3731 3732 if (error_is_set(errp)) { 3733 goto out; 3734 } 3735 qmp_screendump(filename, errp); 3736 3737 out: 3738 md = qapi_dealloc_visitor_new(); 3739 v = qapi_dealloc_get_visitor(md); 3740 visit_type_str(v, &filename, "filename", NULL); 3741 qapi_dealloc_visitor_cleanup(md); 3742 3743 if (local_err) { 3744 qerror_report_err(local_err); 3745 error_free(local_err); 3746 return -1; 3747 } 3748 return 0; 3749 } 3750 3751 int qmp_marshal_input_nbd_server_start(Monitor *mon, const QDict *qdict, QObject **ret) 3752 { 3753 Error *local_err = NULL; 3754 Error **errp = &local_err; 3755 QDict *args = (QDict *)qdict; 3756 QmpInputVisitor *mi; 3757 QapiDeallocVisitor *md; 3758 Visitor *v; 3759 SocketAddress * addr = NULL; 3760 3761 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3762 v = qmp_input_get_visitor(mi); 3763 visit_type_SocketAddress(v, &addr, "addr", errp); 3764 qmp_input_visitor_cleanup(mi); 3765 3766 if (error_is_set(errp)) { 3767 goto out; 3768 } 3769 qmp_nbd_server_start(addr, errp); 3770 3771 out: 3772 md = qapi_dealloc_visitor_new(); 3773 v = qapi_dealloc_get_visitor(md); 3774 visit_type_SocketAddress(v, &addr, "addr", NULL); 3775 qapi_dealloc_visitor_cleanup(md); 3776 3777 if (local_err) { 3778 qerror_report_err(local_err); 3779 error_free(local_err); 3780 return -1; 3781 } 3782 return 0; 3783 } 3784 3785 int qmp_marshal_input_nbd_server_add(Monitor *mon, const QDict *qdict, QObject **ret) 3786 { 3787 Error *local_err = NULL; 3788 Error **errp = &local_err; 3789 QDict *args = (QDict *)qdict; 3790 QmpInputVisitor *mi; 3791 QapiDeallocVisitor *md; 3792 Visitor *v; 3793 char * device = NULL; 3794 bool has_writable = false; 3795 bool writable; 3796 3797 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3798 v = qmp_input_get_visitor(mi); 3799 visit_type_str(v, &device, "device", errp); 3800 visit_start_optional(v, &has_writable, "writable", errp); 3801 if (has_writable) { 3802 visit_type_bool(v, &writable, "writable", errp); 3803 } 3804 visit_end_optional(v, errp); 3805 qmp_input_visitor_cleanup(mi); 3806 3807 if (error_is_set(errp)) { 3808 goto out; 3809 } 3810 qmp_nbd_server_add(device, has_writable, writable, errp); 3811 3812 out: 3813 md = qapi_dealloc_visitor_new(); 3814 v = qapi_dealloc_get_visitor(md); 3815 visit_type_str(v, &device, "device", NULL); 3816 visit_start_optional(v, &has_writable, "writable", NULL); 3817 if (has_writable) { 3818 visit_type_bool(v, &writable, "writable", NULL); 3819 } 3820 visit_end_optional(v, NULL); 3821 qapi_dealloc_visitor_cleanup(md); 3822 3823 if (local_err) { 3824 qerror_report_err(local_err); 3825 error_free(local_err); 3826 return -1; 3827 } 3828 return 0; 3829 } 3830 3831 int qmp_marshal_input_nbd_server_stop(Monitor *mon, const QDict *qdict, QObject **ret) 3832 { 3833 Error *local_err = NULL; 3834 Error **errp = &local_err; 3835 QDict *args = (QDict *)qdict; 3836 (void)args; 3837 if (error_is_set(errp)) { 3838 goto out; 3839 } 3840 qmp_nbd_server_stop(errp); 3841 3842 out: 3843 3844 3845 if (local_err) { 3846 qerror_report_err(local_err); 3847 error_free(local_err); 3848 return -1; 3849 } 3850 return 0; 3851 } 3852 3853 static void qmp_marshal_output_chardev_add(ChardevReturn * ret_in, QObject **ret_out, Error **errp) 3854 { 3855 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 3856 QmpOutputVisitor *mo = qmp_output_visitor_new(); 3857 Visitor *v; 3858 3859 v = qmp_output_get_visitor(mo); 3860 visit_type_ChardevReturn(v, &ret_in, "unused", errp); 3861 if (!error_is_set(errp)) { 3862 *ret_out = qmp_output_get_qobject(mo); 3863 } 3864 qmp_output_visitor_cleanup(mo); 3865 v = qapi_dealloc_get_visitor(md); 3866 visit_type_ChardevReturn(v, &ret_in, "unused", NULL); 3867 qapi_dealloc_visitor_cleanup(md); 3868 } 3869 3870 int qmp_marshal_input_chardev_add(Monitor *mon, const QDict *qdict, QObject **ret) 3871 { 3872 Error *local_err = NULL; 3873 Error **errp = &local_err; 3874 QDict *args = (QDict *)qdict; 3875 ChardevReturn * retval = NULL; 3876 QmpInputVisitor *mi; 3877 QapiDeallocVisitor *md; 3878 Visitor *v; 3879 char * id = NULL; 3880 ChardevBackend * backend = NULL; 3881 3882 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3883 v = qmp_input_get_visitor(mi); 3884 visit_type_str(v, &id, "id", errp); 3885 visit_type_ChardevBackend(v, &backend, "backend", errp); 3886 qmp_input_visitor_cleanup(mi); 3887 3888 if (error_is_set(errp)) { 3889 goto out; 3890 } 3891 retval = qmp_chardev_add(id, backend, errp); 3892 if (!error_is_set(errp)) { 3893 qmp_marshal_output_chardev_add(retval, ret, errp); 3894 } 3895 3896 out: 3897 md = qapi_dealloc_visitor_new(); 3898 v = qapi_dealloc_get_visitor(md); 3899 visit_type_str(v, &id, "id", NULL); 3900 visit_type_ChardevBackend(v, &backend, "backend", NULL); 3901 qapi_dealloc_visitor_cleanup(md); 3902 3903 if (local_err) { 3904 qerror_report_err(local_err); 3905 error_free(local_err); 3906 return -1; 3907 } 3908 return 0; 3909 } 3910 3911 int qmp_marshal_input_chardev_remove(Monitor *mon, const QDict *qdict, QObject **ret) 3912 { 3913 Error *local_err = NULL; 3914 Error **errp = &local_err; 3915 QDict *args = (QDict *)qdict; 3916 QmpInputVisitor *mi; 3917 QapiDeallocVisitor *md; 3918 Visitor *v; 3919 char * id = NULL; 3920 3921 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 3922 v = qmp_input_get_visitor(mi); 3923 visit_type_str(v, &id, "id", errp); 3924 qmp_input_visitor_cleanup(mi); 3925 3926 if (error_is_set(errp)) { 3927 goto out; 3928 } 3929 qmp_chardev_remove(id, errp); 3930 3931 out: 3932 md = qapi_dealloc_visitor_new(); 3933 v = qapi_dealloc_get_visitor(md); 3934 visit_type_str(v, &id, "id", NULL); 3935 qapi_dealloc_visitor_cleanup(md); 3936 3937 if (local_err) { 3938 qerror_report_err(local_err); 3939 error_free(local_err); 3940 return -1; 3941 } 3942 return 0; 3943 } 3944 3945 static void qmp_marshal_output_query_tpm_models(TpmModelList * ret_in, QObject **ret_out, Error **errp) 3946 { 3947 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 3948 QmpOutputVisitor *mo = qmp_output_visitor_new(); 3949 Visitor *v; 3950 3951 v = qmp_output_get_visitor(mo); 3952 visit_type_TpmModelList(v, &ret_in, "unused", errp); 3953 if (!error_is_set(errp)) { 3954 *ret_out = qmp_output_get_qobject(mo); 3955 } 3956 qmp_output_visitor_cleanup(mo); 3957 v = qapi_dealloc_get_visitor(md); 3958 visit_type_TpmModelList(v, &ret_in, "unused", NULL); 3959 qapi_dealloc_visitor_cleanup(md); 3960 } 3961 3962 int qmp_marshal_input_query_tpm_models(Monitor *mon, const QDict *qdict, QObject **ret) 3963 { 3964 Error *local_err = NULL; 3965 Error **errp = &local_err; 3966 QDict *args = (QDict *)qdict; 3967 TpmModelList * retval = NULL; 3968 (void)args; 3969 if (error_is_set(errp)) { 3970 goto out; 3971 } 3972 retval = qmp_query_tpm_models(errp); 3973 if (!error_is_set(errp)) { 3974 qmp_marshal_output_query_tpm_models(retval, ret, errp); 3975 } 3976 3977 out: 3978 3979 3980 if (local_err) { 3981 qerror_report_err(local_err); 3982 error_free(local_err); 3983 return -1; 3984 } 3985 return 0; 3986 } 3987 3988 static void qmp_marshal_output_query_tpm_types(TpmTypeList * ret_in, QObject **ret_out, Error **errp) 3989 { 3990 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 3991 QmpOutputVisitor *mo = qmp_output_visitor_new(); 3992 Visitor *v; 3993 3994 v = qmp_output_get_visitor(mo); 3995 visit_type_TpmTypeList(v, &ret_in, "unused", errp); 3996 if (!error_is_set(errp)) { 3997 *ret_out = qmp_output_get_qobject(mo); 3998 } 3999 qmp_output_visitor_cleanup(mo); 4000 v = qapi_dealloc_get_visitor(md); 4001 visit_type_TpmTypeList(v, &ret_in, "unused", NULL); 4002 qapi_dealloc_visitor_cleanup(md); 4003 } 4004 4005 int qmp_marshal_input_query_tpm_types(Monitor *mon, const QDict *qdict, QObject **ret) 4006 { 4007 Error *local_err = NULL; 4008 Error **errp = &local_err; 4009 QDict *args = (QDict *)qdict; 4010 TpmTypeList * retval = NULL; 4011 (void)args; 4012 if (error_is_set(errp)) { 4013 goto out; 4014 } 4015 retval = qmp_query_tpm_types(errp); 4016 if (!error_is_set(errp)) { 4017 qmp_marshal_output_query_tpm_types(retval, ret, errp); 4018 } 4019 4020 out: 4021 4022 4023 if (local_err) { 4024 qerror_report_err(local_err); 4025 error_free(local_err); 4026 return -1; 4027 } 4028 return 0; 4029 } 4030 4031 static void qmp_marshal_output_query_tpm(TPMInfoList * ret_in, QObject **ret_out, Error **errp) 4032 { 4033 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 4034 QmpOutputVisitor *mo = qmp_output_visitor_new(); 4035 Visitor *v; 4036 4037 v = qmp_output_get_visitor(mo); 4038 visit_type_TPMInfoList(v, &ret_in, "unused", errp); 4039 if (!error_is_set(errp)) { 4040 *ret_out = qmp_output_get_qobject(mo); 4041 } 4042 qmp_output_visitor_cleanup(mo); 4043 v = qapi_dealloc_get_visitor(md); 4044 visit_type_TPMInfoList(v, &ret_in, "unused", NULL); 4045 qapi_dealloc_visitor_cleanup(md); 4046 } 4047 4048 int qmp_marshal_input_query_tpm(Monitor *mon, const QDict *qdict, QObject **ret) 4049 { 4050 Error *local_err = NULL; 4051 Error **errp = &local_err; 4052 QDict *args = (QDict *)qdict; 4053 TPMInfoList * retval = NULL; 4054 (void)args; 4055 if (error_is_set(errp)) { 4056 goto out; 4057 } 4058 retval = qmp_query_tpm(errp); 4059 if (!error_is_set(errp)) { 4060 qmp_marshal_output_query_tpm(retval, ret, errp); 4061 } 4062 4063 out: 4064 4065 4066 if (local_err) { 4067 qerror_report_err(local_err); 4068 error_free(local_err); 4069 return -1; 4070 } 4071 return 0; 4072 } 4073 4074 static void qmp_marshal_output_query_command_line_options(CommandLineOptionInfoList * ret_in, QObject **ret_out, Error **errp) 4075 { 4076 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 4077 QmpOutputVisitor *mo = qmp_output_visitor_new(); 4078 Visitor *v; 4079 4080 v = qmp_output_get_visitor(mo); 4081 visit_type_CommandLineOptionInfoList(v, &ret_in, "unused", errp); 4082 if (!error_is_set(errp)) { 4083 *ret_out = qmp_output_get_qobject(mo); 4084 } 4085 qmp_output_visitor_cleanup(mo); 4086 v = qapi_dealloc_get_visitor(md); 4087 visit_type_CommandLineOptionInfoList(v, &ret_in, "unused", NULL); 4088 qapi_dealloc_visitor_cleanup(md); 4089 } 4090 4091 int qmp_marshal_input_query_command_line_options(Monitor *mon, const QDict *qdict, QObject **ret) 4092 { 4093 Error *local_err = NULL; 4094 Error **errp = &local_err; 4095 QDict *args = (QDict *)qdict; 4096 CommandLineOptionInfoList * retval = NULL; 4097 QmpInputVisitor *mi; 4098 QapiDeallocVisitor *md; 4099 Visitor *v; 4100 bool has_option = false; 4101 char * option = NULL; 4102 4103 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 4104 v = qmp_input_get_visitor(mi); 4105 visit_start_optional(v, &has_option, "option", errp); 4106 if (has_option) { 4107 visit_type_str(v, &option, "option", errp); 4108 } 4109 visit_end_optional(v, errp); 4110 qmp_input_visitor_cleanup(mi); 4111 4112 if (error_is_set(errp)) { 4113 goto out; 4114 } 4115 retval = qmp_query_command_line_options(has_option, option, errp); 4116 if (!error_is_set(errp)) { 4117 qmp_marshal_output_query_command_line_options(retval, ret, errp); 4118 } 4119 4120 out: 4121 md = qapi_dealloc_visitor_new(); 4122 v = qapi_dealloc_get_visitor(md); 4123 visit_start_optional(v, &has_option, "option", NULL); 4124 if (has_option) { 4125 visit_type_str(v, &option, "option", NULL); 4126 } 4127 visit_end_optional(v, NULL); 4128 qapi_dealloc_visitor_cleanup(md); 4129 4130 if (local_err) { 4131 qerror_report_err(local_err); 4132 error_free(local_err); 4133 return -1; 4134 } 4135 return 0; 4136 } 4137 4138 static void qmp_marshal_output_query_rx_filter(RxFilterInfoList * ret_in, QObject **ret_out, Error **errp) 4139 { 4140 QapiDeallocVisitor *md = qapi_dealloc_visitor_new(); 4141 QmpOutputVisitor *mo = qmp_output_visitor_new(); 4142 Visitor *v; 4143 4144 v = qmp_output_get_visitor(mo); 4145 visit_type_RxFilterInfoList(v, &ret_in, "unused", errp); 4146 if (!error_is_set(errp)) { 4147 *ret_out = qmp_output_get_qobject(mo); 4148 } 4149 qmp_output_visitor_cleanup(mo); 4150 v = qapi_dealloc_get_visitor(md); 4151 visit_type_RxFilterInfoList(v, &ret_in, "unused", NULL); 4152 qapi_dealloc_visitor_cleanup(md); 4153 } 4154 4155 int qmp_marshal_input_query_rx_filter(Monitor *mon, const QDict *qdict, QObject **ret) 4156 { 4157 Error *local_err = NULL; 4158 Error **errp = &local_err; 4159 QDict *args = (QDict *)qdict; 4160 RxFilterInfoList * retval = NULL; 4161 QmpInputVisitor *mi; 4162 QapiDeallocVisitor *md; 4163 Visitor *v; 4164 bool has_name = false; 4165 char * name = NULL; 4166 4167 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 4168 v = qmp_input_get_visitor(mi); 4169 visit_start_optional(v, &has_name, "name", errp); 4170 if (has_name) { 4171 visit_type_str(v, &name, "name", errp); 4172 } 4173 visit_end_optional(v, errp); 4174 qmp_input_visitor_cleanup(mi); 4175 4176 if (error_is_set(errp)) { 4177 goto out; 4178 } 4179 retval = qmp_query_rx_filter(has_name, name, errp); 4180 if (!error_is_set(errp)) { 4181 qmp_marshal_output_query_rx_filter(retval, ret, errp); 4182 } 4183 4184 out: 4185 md = qapi_dealloc_visitor_new(); 4186 v = qapi_dealloc_get_visitor(md); 4187 visit_start_optional(v, &has_name, "name", NULL); 4188 if (has_name) { 4189 visit_type_str(v, &name, "name", NULL); 4190 } 4191 visit_end_optional(v, NULL); 4192 qapi_dealloc_visitor_cleanup(md); 4193 4194 if (local_err) { 4195 qerror_report_err(local_err); 4196 error_free(local_err); 4197 return -1; 4198 } 4199 return 0; 4200 } 4201 4202 int qmp_marshal_input_blockdev_add(Monitor *mon, const QDict *qdict, QObject **ret) 4203 { 4204 Error *local_err = NULL; 4205 Error **errp = &local_err; 4206 QDict *args = (QDict *)qdict; 4207 QmpInputVisitor *mi; 4208 QapiDeallocVisitor *md; 4209 Visitor *v; 4210 BlockdevOptions * options = NULL; 4211 4212 mi = qmp_input_visitor_new_strict(QOBJECT(args)); 4213 v = qmp_input_get_visitor(mi); 4214 visit_type_BlockdevOptions(v, &options, "options", errp); 4215 qmp_input_visitor_cleanup(mi); 4216 4217 if (error_is_set(errp)) { 4218 goto out; 4219 } 4220 qmp_blockdev_add(options, errp); 4221 4222 out: 4223 md = qapi_dealloc_visitor_new(); 4224 v = qapi_dealloc_get_visitor(md); 4225 visit_type_BlockdevOptions(v, &options, "options", NULL); 4226 qapi_dealloc_visitor_cleanup(md); 4227 4228 if (local_err) { 4229 qerror_report_err(local_err); 4230 error_free(local_err); 4231 return -1; 4232 } 4233 return 0; 4234 } 4235 4236