xref: /cloud-hypervisor/vmm/src/api/openapi/cloud-hypervisor.yaml (revision d10f20eb718023742143fa847a37f3d6114ead52)
1openapi: 3.0.1
2info:
3  title: Cloud Hypervisor API
4  description: Local HTTP based API for managing and inspecting a cloud-hypervisor virtual machine.
5  license:
6    name: Apache 2.0
7    url: http://www.apache.org/licenses/LICENSE-2.0.html
8  version: 0.3.0
9
10servers:
11  - url: http://localhost/api/v1
12
13paths:
14  /vmm.ping:
15    get:
16      summary: Ping the VMM to check for API server availability
17      responses:
18        200:
19          description: The VMM information
20          content:
21            application/json:
22              schema:
23                $ref: "#/components/schemas/VmmPingResponse"
24
25  /vmm.shutdown:
26    put:
27      summary: Shuts the cloud-hypervisor VMM.
28      operationId: shutdownVMM
29      responses:
30        204:
31          description: The VMM successfully shutdown.
32
33  /vm.info:
34    get:
35      summary: Returns general information about the cloud-hypervisor Virtual Machine (VM) instance.
36      responses:
37        200:
38          description: The VM information
39          content:
40            application/json:
41              schema:
42                $ref: "#/components/schemas/VmInfo"
43
44  /vm.counters:
45    get:
46      summary: Get counters from the VM
47      responses:
48        200:
49          description: The VM counters
50          content:
51            application/json:
52              schema:
53                $ref: "#/components/schemas/VmCounters"
54
55  /vm.create:
56    put:
57      summary: Create the cloud-hypervisor Virtual Machine (VM) instance. The instance is not booted, only created.
58      operationId: createVM
59      requestBody:
60        description: The VM configuration
61        content:
62          application/json:
63            schema:
64              $ref: "#/components/schemas/VmConfig"
65        required: true
66      responses:
67        204:
68          description: The VM instance was successfully created.
69
70  /vm.delete:
71    put:
72      summary: Delete the cloud-hypervisor Virtual Machine (VM) instance.
73      operationId: deleteVM
74      responses:
75        204:
76          description: The VM instance was successfully deleted.
77
78  /vm.boot:
79    put:
80      summary: Boot the previously created VM instance.
81      operationId: bootVM
82      responses:
83        204:
84          description: The VM instance successfully booted.
85        404:
86          description: The VM instance could not boot because it is not created yet
87
88  /vm.pause:
89    put:
90      summary: Pause a previously booted VM instance.
91      operationId: pauseVM
92      responses:
93        204:
94          description: The VM instance successfully paused.
95        404:
96          description: The VM instance could not pause because it is not created yet
97        405:
98          description: The VM instance could not pause because it is not booted.
99
100  /vm.resume:
101    put:
102      summary: Resume a previously paused VM instance.
103      operationId: resumeVM
104      responses:
105        204:
106          description: The VM instance successfully paused.
107        404:
108          description: The VM instance could not resume because it is not booted yet
109        405:
110          description: The VM instance could not resume because it is not paused.
111
112  /vm.shutdown:
113    put:
114      summary: Shut the VM instance down.
115      operationId: shutdownVM
116      responses:
117        204:
118          description: The VM instance successfully shut down.
119        404:
120          description: The VM instance could not shut down because is not created.
121        405:
122          description: The VM instance could not shut down because it is not started.
123
124  /vm.reboot:
125    put:
126      summary: Reboot the VM instance.
127      operationId: rebootVM
128      responses:
129        204:
130          description: The VM instance successfully rebooted.
131        404:
132          description: The VM instance could not reboot because it is not created.
133        405:
134          description: The VM instance could not reboot because it is not booted.
135
136  /vm.power-button:
137    put:
138      summary: Trigger a power button in the VM
139      operationId: power-buttonVM
140      responses:
141        204:
142          description: Power button successfully triggered in the VM
143        404:
144          description: The button could not be triggered because it is not created yet
145        405:
146          description: The button could not be triggered because it is not booted.
147
148  /vm.resize:
149    put:
150      summary: Resize the VM
151      requestBody:
152        description: The target size for the VM
153        content:
154          application/json:
155            schema:
156              $ref: "#/components/schemas/VmResize"
157        required: true
158      responses:
159        204:
160          description: The VM instance was successfully resized.
161        404:
162          description: The VM instance could not be resized because it is not created.
163
164  /vm.resize-zone:
165    put:
166      summary: Resize a memory zone
167      requestBody:
168        description: The target size for the memory zone
169        content:
170          application/json:
171            schema:
172              $ref: "#/components/schemas/VmResizeZone"
173        required: true
174      responses:
175        204:
176          description: The memory zone was successfully resized.
177        500:
178          description: The memory zone could not be resized.
179
180  /vm.add-device:
181    put:
182      summary: Add a new device to the VM
183      requestBody:
184        description: The path of the new device
185        content:
186          application/json:
187            schema:
188              $ref: "#/components/schemas/DeviceConfig"
189        required: true
190      responses:
191        200:
192          description: The new device was successfully added to the VM instance.
193          content:
194            application/json:
195              schema:
196                $ref: "#/components/schemas/PciDeviceInfo"
197        204:
198          description: The new device was successfully (cold) added to the VM instance.
199        404:
200          description: The new device could not be added to the VM instance.
201
202  /vm.remove-device:
203    put:
204      summary: Remove a device from the VM
205      requestBody:
206        description: The identifier of the device
207        content:
208          application/json:
209            schema:
210              $ref: "#/components/schemas/VmRemoveDevice"
211        required: true
212      responses:
213        204:
214          description: The device was successfully removed from the VM instance.
215        404:
216          description: The device could not be removed from the VM instance.
217
218  /vm.add-disk:
219    put:
220      summary: Add a new disk to the VM
221      requestBody:
222        description: The details of the new disk
223        content:
224          application/json:
225            schema:
226              $ref: "#/components/schemas/DiskConfig"
227        required: true
228      responses:
229        200:
230          description: The new disk was successfully added to the VM instance.
231          content:
232            application/json:
233              schema:
234                $ref: "#/components/schemas/PciDeviceInfo"
235        204:
236          description: The new disk was successfully (cold) added to the VM instance.
237        500:
238          description: The new disk could not be added to the VM instance.
239
240  /vm.add-fs:
241    put:
242      summary: Add a new virtio-fs device to the VM
243      requestBody:
244        description: The details of the new virtio-fs
245        content:
246          application/json:
247            schema:
248              $ref: "#/components/schemas/FsConfig"
249        required: true
250      responses:
251        200:
252          description: The new device was successfully added to the VM instance.
253          content:
254            application/json:
255              schema:
256                $ref: "#/components/schemas/PciDeviceInfo"
257        204:
258          description: The new device was successfully (cold) added to the VM instance.
259        500:
260          description: The new device could not be added to the VM instance.
261
262  /vm.add-pmem:
263    put:
264      summary: Add a new pmem device to the VM
265      requestBody:
266        description: The details of the new pmem device
267        content:
268          application/json:
269            schema:
270              $ref: "#/components/schemas/PmemConfig"
271        required: true
272      responses:
273        200:
274          description: The new device was successfully added to the VM instance.
275          content:
276            application/json:
277              schema:
278                $ref: "#/components/schemas/PciDeviceInfo"
279        204:
280          description: The new device was successfully (cold) added to the VM instance.
281        500:
282          description: The new device could not be added to the VM instance.
283
284  /vm.add-net:
285    put:
286      summary: Add a new network device to the VM
287      requestBody:
288        description: The details of the new network device
289        content:
290          application/json:
291            schema:
292              $ref: "#/components/schemas/NetConfig"
293        required: true
294      responses:
295        200:
296          description: The new device was successfully added to the VM instance.
297          content:
298            application/json:
299              schema:
300                $ref: "#/components/schemas/PciDeviceInfo"
301        204:
302          description: The new device was successfully (cold) added to the VM instance.
303        500:
304          description: The new device could not be added to the VM instance.
305
306  /vm.add-vsock:
307    put:
308      summary: Add a new vsock device to the VM
309      requestBody:
310        description: The details of the new vsock device
311        content:
312          application/json:
313            schema:
314              $ref: "#/components/schemas/VsockConfig"
315        required: true
316      responses:
317        200:
318          description: The new device was successfully added to the VM instance.
319          content:
320            application/json:
321              schema:
322                $ref: "#/components/schemas/PciDeviceInfo"
323        204:
324          description: The new device was successfully (cold) added to the VM instance.
325        500:
326          description: The new device could not be added to the VM instance.
327
328  /vm.add-vdpa:
329    put:
330      summary: Add a new vDPA device to the VM
331      requestBody:
332        description: The details of the new vDPA device
333        content:
334          application/json:
335            schema:
336              $ref: "#/components/schemas/VdpaConfig"
337        required: true
338      responses:
339        200:
340          description: The new vDPA device was successfully added to the VM instance.
341          content:
342            application/json:
343              schema:
344                $ref: "#/components/schemas/PciDeviceInfo"
345        204:
346          description: The new vDPA device was successfully (cold) added to the VM instance.
347        500:
348          description: The new vDPA device could not be added to the VM instance.
349
350  /vm.add-user-device:
351    put:
352      requestBody:
353        content:
354          application/json:
355            schema:
356              $ref: '#/components/schemas/VmAddUserDevice'
357        description: The path of the new device
358        required: true
359      responses:
360        "200":
361          content:
362            application/json:
363              schema:
364                $ref: '#/components/schemas/PciDeviceInfo'
365          description: The new device was successfully added to the VM instance.
366        "204":
367          description: The new device was successfully (cold) added to the VM instance.
368        "404":
369          description: The new device could not be added to the VM instance.
370      summary: Add a new userspace device to the VM
371
372  /vm.snapshot:
373    put:
374      summary: Returns a VM snapshot.
375      requestBody:
376        description: The snapshot configuration
377        content:
378          application/json:
379            schema:
380              $ref: "#/components/schemas/VmSnapshotConfig"
381        required: true
382      responses:
383        204:
384          description: The VM instance was successfully snapshotted.
385        404:
386          description: The VM instance could not be snapshotted because it is not created.
387        405:
388          description: The VM instance could not be snapshotted because it is not booted.
389
390  /vm.coredump:
391    put:
392      summary: Takes a VM coredump.
393      requestBody:
394        description: The coredump configuration
395        content:
396          application/json:
397            schema:
398              $ref: "#/components/schemas/VmCoredumpData"
399        required: true
400      responses:
401        204:
402          description: The VM instance was successfully coredumped.
403        404:
404          description: The VM instance could not be coredumped because it is not created.
405        405:
406          description: The VM instance could not be coredumped because it is not booted.
407
408  /vmm.nmi:
409    put:
410      summary: Inject an NMI.
411      responses:
412        204:
413          description: The NMI successfully injected.
414
415  /vm.restore:
416    put:
417      summary: Restore a VM from a snapshot.
418      requestBody:
419        description: The restore configuration
420        content:
421          application/json:
422            schema:
423              $ref: "#/components/schemas/RestoreConfig"
424        required: true
425      responses:
426        204:
427          description: The VM instance was successfully restored.
428        404:
429          description: The VM instance could not be restored because it is already created.
430
431  /vm.receive-migration:
432    put:
433      summary: Receive a VM migration from URL
434      requestBody:
435        description: The URL for the reception of migration state
436        content:
437          application/json:
438            schema:
439              $ref: "#/components/schemas/ReceiveMigrationData"
440        required: true
441      responses:
442        204:
443          description: The VM migration was successfully received.
444        500:
445          description: The VM migration could not be received.
446
447  /vm.send-migration:
448    put:
449      summary: Send a VM migration to URL
450      requestBody:
451        description: The URL for sending the migration state
452        content:
453          application/json:
454            schema:
455              $ref: "#/components/schemas/SendMigrationData"
456        required: true
457      responses:
458        204:
459          description: The VM migration was successfully sent.
460        500:
461          description: The VM migration could not be sent.
462
463components:
464  schemas:
465    VmmPingResponse:
466      required:
467        - version
468      type: object
469      properties:
470        build_version:
471          type: string
472        version:
473          type: string
474        pid:
475          type: integer
476          format: int64
477        features:
478          type: array
479          items:
480            type: string
481      description: Virtual Machine Monitor information
482
483    VmInfo:
484      required:
485        - config
486        - state
487      type: object
488      properties:
489        config:
490          $ref: "#/components/schemas/VmConfig"
491        state:
492          type: string
493          enum: [Created, Running, Shutdown, Paused]
494        memory_actual_size:
495          type: integer
496          format: int64
497        device_tree:
498          type: object
499          additionalProperties:
500            $ref: "#/components/schemas/DeviceNode"
501      description: Virtual Machine information
502
503    DeviceNode:
504      type: object
505      properties:
506        id:
507          type: string
508        resources:
509          type: array
510          items:
511            # Rust enum type (with data) which can't be better represented here
512            type: object
513        children:
514          type: array
515          items:
516            type: string
517        pci_bdf:
518          type: string
519
520    VmCounters:
521      type: object
522      additionalProperties:
523        type: object
524        additionalProperties:
525          type: integer
526          format: int64
527
528    PciDeviceInfo:
529      required:
530        - id
531        - bdf
532      type: object
533      properties:
534        id:
535          type: string
536        bdf:
537          type: string
538      description: Information about a PCI device
539
540    PayloadConfig:
541      type: object
542      properties:
543        firmware:
544          type: string
545        kernel:
546          type: string
547        cmdline:
548          type: string
549        initramfs:
550          type: string
551      description: Payloads to boot in guest
552
553    VmConfig:
554      required:
555        - payload
556      type: object
557      properties:
558        cpus:
559          $ref: "#/components/schemas/CpusConfig"
560        memory:
561          $ref: "#/components/schemas/MemoryConfig"
562        payload:
563          $ref: "#/components/schemas/PayloadConfig"
564        rate_limit_groups:
565          type: array
566          items:
567            $ref: "#/components/schemas/RateLimitGroupConfig"
568        disks:
569          type: array
570          items:
571            $ref: "#/components/schemas/DiskConfig"
572        net:
573          type: array
574          items:
575            $ref: "#/components/schemas/NetConfig"
576        rng:
577          $ref: "#/components/schemas/RngConfig"
578        balloon:
579          $ref: "#/components/schemas/BalloonConfig"
580        fs:
581          type: array
582          items:
583            $ref: "#/components/schemas/FsConfig"
584        pmem:
585          type: array
586          items:
587            $ref: "#/components/schemas/PmemConfig"
588        serial:
589          $ref: "#/components/schemas/ConsoleConfig"
590        console:
591          $ref: "#/components/schemas/ConsoleConfig"
592        debug_console:
593          $ref: "#/components/schemas/DebugConsoleConfig"
594        devices:
595          type: array
596          items:
597            $ref: "#/components/schemas/DeviceConfig"
598        vdpa:
599          type: array
600          items:
601            $ref: "#/components/schemas/VdpaConfig"
602        vsock:
603          $ref: "#/components/schemas/VsockConfig"
604        sgx_epc:
605          type: array
606          items:
607            $ref: "#/components/schemas/SgxEpcConfig"
608        numa:
609          type: array
610          items:
611            $ref: "#/components/schemas/NumaConfig"
612        iommu:
613          type: boolean
614          default: false
615        watchdog:
616          type: boolean
617          default: false
618        pvpanic:
619          type: boolean
620          default: false
621        pci_segments:
622          type: array
623          items:
624            $ref: "#/components/schemas/PciSegmentConfig"
625        platform:
626          $ref: "#/components/schemas/PlatformConfig"
627        tpm:
628          $ref: "#/components/schemas/TpmConfig"
629      description: Virtual machine configuration
630
631    CpuAffinity:
632      required:
633        - vcpu
634        - host_cpus
635      type: object
636      properties:
637        vcpu:
638          type: integer
639        host_cpus:
640          type: array
641          items:
642            type: integer
643
644    CpuFeatures:
645      type: object
646      properties:
647        amx:
648          type: boolean
649
650    CpuTopology:
651      type: object
652      properties:
653        threads_per_core:
654          type: integer
655        cores_per_die:
656          type: integer
657        dies_per_package:
658          type: integer
659        packages:
660          type: integer
661
662    CpusConfig:
663      required:
664        - boot_vcpus
665        - max_vcpus
666      type: object
667      properties:
668        boot_vcpus:
669          minimum: 1
670          type: integer
671        max_vcpus:
672          minimum: 1
673          type: integer
674        topology:
675          $ref: "#/components/schemas/CpuTopology"
676        kvm_hyperv:
677          type: boolean
678          default: false
679        max_phys_bits:
680          type: integer
681        affinity:
682          type: array
683          items:
684            $ref: "#/components/schemas/CpuAffinity"
685        features:
686          $ref: "#/components/schemas/CpuFeatures"
687
688    PciSegmentConfig:
689      required:
690        - pci_segment
691      type: object
692      properties:
693        pci_segment:
694          type: integer
695          format: int16
696        mmio32_aperture_weight:
697          type: integer
698          format: int32
699        mmio64_aperture_weight:
700          type: integer
701          format: int32
702
703    PlatformConfig:
704      type: object
705      properties:
706        num_pci_segments:
707          type: integer
708          format: int16
709        iommu_segments:
710          type: array
711          items:
712            type: integer
713            format: int16
714        serial_number:
715          type: string
716        uuid:
717          type: string
718        oem_strings:
719          type: array
720          items:
721            type: string
722        tdx:
723          type: boolean
724          default: false
725
726    MemoryZoneConfig:
727      required:
728        - id
729        - size
730      type: object
731      properties:
732        id:
733          type: string
734        size:
735          type: integer
736          format: int64
737        file:
738          type: string
739        mergeable:
740          type: boolean
741          default: false
742        shared:
743          type: boolean
744          default: false
745        hugepages:
746          type: boolean
747          default: false
748        hugepage_size:
749          type: integer
750          format: int64
751        host_numa_node:
752          type: integer
753          format: int32
754        hotplug_size:
755          type: integer
756          format: int64
757        hotplugged_size:
758          type: integer
759          format: int64
760        prefault:
761          type: boolean
762          default: false
763
764    MemoryConfig:
765      required:
766        - size
767      type: object
768      properties:
769        size:
770          type: integer
771          format: int64
772        hotplug_size:
773          type: integer
774          format: int64
775        hotplugged_size:
776          type: integer
777          format: int64
778        mergeable:
779          type: boolean
780          default: false
781        hotplug_method:
782          type: string
783          default: "Acpi"
784        shared:
785          type: boolean
786          default: false
787        hugepages:
788          type: boolean
789          default: false
790        hugepage_size:
791          type: integer
792          format: int64
793        prefault:
794          type: boolean
795          default: false
796        thp:
797          type: boolean
798          default: true
799        zones:
800          type: array
801          items:
802            $ref: "#/components/schemas/MemoryZoneConfig"
803
804    TokenBucket:
805      required:
806        - size
807        - refill_time
808      type: object
809      properties:
810        size:
811          type: integer
812          format: int64
813          minimum: 0
814          description: The total number of tokens this bucket can hold.
815        one_time_burst:
816          type: integer
817          format: int64
818          minimum: 0
819          description: The initial size of a token bucket.
820        refill_time:
821          type: integer
822          format: int64
823          minimum: 0
824          description: The amount of milliseconds it takes for the bucket to refill.
825      description:
826        Defines a token bucket with a maximum capacity (_size_), an initial burst size
827        (_one_time_burst_) and an interval for refilling purposes (_refill_time_).
828        The refill-rate is derived from _size_ and _refill_time_, and it is the constant
829        rate at which the tokens replenish. The refill process only starts happening after
830        the initial burst budget is consumed.
831        Consumption from the token bucket is unbounded in speed which allows for bursts
832        bound in size by the amount of tokens available.
833        Once the token bucket is empty, consumption speed is bound by the refill-rate.
834
835    RateLimiterConfig:
836      type: object
837      properties:
838        bandwidth:
839          $ref: "#/components/schemas/TokenBucket"
840        ops:
841          $ref: "#/components/schemas/TokenBucket"
842      description:
843        Defines an IO rate limiter with independent bytes/s and ops/s limits.
844        Limits are defined by configuring each of the _bandwidth_ and _ops_ token buckets.
845
846    RateLimitGroupConfig:
847      required:
848        - id
849        - rate_limiter_config
850      type: object
851      properties:
852        id:
853          type: string
854        rate_limiter_config:
855          $ref: "#/components/schemas/RateLimiterConfig"
856
857    VirtQueueAffinity:
858      required:
859        - queue_index
860        - host_cpus
861      type: object
862      properties:
863        queue_index:
864          type: integer
865        host_cpus:
866          type: array
867          items:
868            type: integer
869
870    DiskConfig:
871      required:
872        - path
873      type: object
874      properties:
875        path:
876          type: string
877        readonly:
878          type: boolean
879          default: false
880        direct:
881          type: boolean
882          default: false
883        iommu:
884          type: boolean
885          default: false
886        num_queues:
887          type: integer
888          default: 1
889        queue_size:
890          type: integer
891          default: 128
892        vhost_user:
893          type: boolean
894          default: false
895        vhost_socket:
896          type: string
897        rate_limiter_config:
898          $ref: "#/components/schemas/RateLimiterConfig"
899        pci_segment:
900          type: integer
901          format: int16
902        id:
903          type: string
904        serial:
905          type: string
906        rate_limit_group:
907          type: string
908        queue_affinity:
909          type: array
910          items:
911            $ref: "#/components/schemas/VirtQueueAffinity"
912
913    NetConfig:
914      type: object
915      properties:
916        tap:
917          type: string
918        ip:
919          type: string
920          default: "192.168.249.1"
921        mask:
922          type: string
923          default: "255.255.255.0"
924        mac:
925          type: string
926        host_mac:
927          type: string
928        mtu:
929          type: integer
930        iommu:
931          type: boolean
932          default: false
933        num_queues:
934          type: integer
935          default: 2
936        queue_size:
937          type: integer
938          default: 256
939        vhost_user:
940          type: boolean
941          default: false
942        vhost_socket:
943          type: string
944        vhost_mode:
945          type: string
946          default: "Client"
947        id:
948          type: string
949        pci_segment:
950          type: integer
951          format: int16
952        rate_limiter_config:
953          $ref: "#/components/schemas/RateLimiterConfig"
954
955    RngConfig:
956      required:
957        - src
958      type: object
959      properties:
960        src:
961          type: string
962        iommu:
963          type: boolean
964          default: false
965
966    BalloonConfig:
967      required:
968        - size
969      type: object
970      properties:
971        size:
972          type: integer
973          format: int64
974        deflate_on_oom:
975          type: boolean
976          default: false
977          description: Deflate balloon when the guest is under memory pressure.
978        free_page_reporting:
979          type: boolean
980          default: false
981          description: Enable guest to report free pages.
982
983    FsConfig:
984      required:
985        - num_queues
986        - queue_size
987        - socket
988        - tag
989      type: object
990      properties:
991        tag:
992          type: string
993        socket:
994          type: string
995        num_queues:
996          type: integer
997          default: 1
998        queue_size:
999          type: integer
1000          default: 1024
1001        pci_segment:
1002          type: integer
1003          format: int16
1004        id:
1005          type: string
1006
1007    PmemConfig:
1008      required:
1009        - file
1010      type: object
1011      properties:
1012        file:
1013          type: string
1014        size:
1015          type: integer
1016          format: int64
1017        iommu:
1018          type: boolean
1019          default: false
1020        discard_writes:
1021          type: boolean
1022          default: false
1023        pci_segment:
1024          type: integer
1025          format: int16
1026        id:
1027          type: string
1028
1029    ConsoleConfig:
1030      required:
1031        - mode
1032      type: object
1033      properties:
1034        file:
1035          type: string
1036        socket:
1037          type: string
1038        mode:
1039          type: string
1040          enum: ["Off", "Pty", "Tty", "File", "Socket", "Null"]
1041        iommu:
1042          type: boolean
1043          default: false
1044
1045    DebugConsoleConfig:
1046      required:
1047        - mode
1048      type: object
1049      properties:
1050        file:
1051          type: string
1052        mode:
1053          type: string
1054          enum: ["Off", "Pty", "Tty", "File", "Null"]
1055        iobase:
1056          type: integer
1057
1058    DeviceConfig:
1059      required:
1060        - path
1061      type: object
1062      properties:
1063        path:
1064          type: string
1065        iommu:
1066          type: boolean
1067          default: false
1068        pci_segment:
1069          type: integer
1070          format: int16
1071        id:
1072          type: string
1073        x_nv_gpudirect_clique:
1074          type: integer
1075          format: int8
1076    TpmConfig:
1077      required:
1078        - socket
1079      type: object
1080      properties:
1081        socket:
1082          type: string
1083
1084    VdpaConfig:
1085      required:
1086        - path
1087        - num_queues
1088      type: object
1089      properties:
1090        path:
1091          type: string
1092        num_queues:
1093          type: integer
1094          default: 1
1095        iommu:
1096          type: boolean
1097          default: false
1098        pci_segment:
1099          type: integer
1100          format: int16
1101        id:
1102          type: string
1103
1104    VsockConfig:
1105      required:
1106        - cid
1107        - socket
1108      type: object
1109      properties:
1110        cid:
1111          type: integer
1112          format: int64
1113          minimum: 3
1114          description: Guest Vsock CID
1115        socket:
1116          type: string
1117          description: Path to UNIX domain socket, used to proxy vsock connections.
1118        iommu:
1119          type: boolean
1120          default: false
1121        pci_segment:
1122          type: integer
1123          format: int16
1124        id:
1125          type: string
1126
1127    SgxEpcConfig:
1128      required:
1129        - id
1130        - size
1131      type: object
1132      properties:
1133        id:
1134          type: string
1135        size:
1136          type: integer
1137          format: int64
1138        prefault:
1139          type: boolean
1140          default: false
1141
1142    NumaDistance:
1143      required:
1144        - destination
1145        - distance
1146      type: object
1147      properties:
1148        destination:
1149          type: integer
1150          format: int32
1151        distance:
1152          type: integer
1153          format: int32
1154
1155    NumaConfig:
1156      required:
1157        - guest_numa_id
1158      type: object
1159      properties:
1160        guest_numa_id:
1161          type: integer
1162          format: int32
1163        cpus:
1164          type: array
1165          items:
1166            type: integer
1167            format: int32
1168        distances:
1169          type: array
1170          items:
1171            $ref: "#/components/schemas/NumaDistance"
1172        memory_zones:
1173          type: array
1174          items:
1175            type: string
1176        sgx_epc_sections:
1177          type: array
1178          items:
1179            type: string
1180        pci_segments:
1181          type: array
1182          items:
1183            type: integer
1184            format: int32
1185
1186    VmResize:
1187      type: object
1188      properties:
1189        desired_vcpus:
1190          minimum: 1
1191          type: integer
1192        desired_ram:
1193          description: desired memory ram in bytes
1194          type: integer
1195          format: int64
1196        desired_balloon:
1197          description: desired balloon size in bytes
1198          type: integer
1199          format: int64
1200
1201    VmResizeZone:
1202      type: object
1203      properties:
1204        id:
1205          type: string
1206        desired_ram:
1207          description: desired memory zone size in bytes
1208          type: integer
1209          format: int64
1210
1211    VmRemoveDevice:
1212      type: object
1213      properties:
1214        id:
1215          type: string
1216
1217    VmSnapshotConfig:
1218      type: object
1219      properties:
1220        destination_url:
1221          type: string
1222
1223    VmCoredumpData:
1224      type: object
1225      properties:
1226        destination_url:
1227          type: string
1228
1229    RestoreConfig:
1230      required:
1231        - source_url
1232      type: object
1233      properties:
1234        source_url:
1235          type: string
1236        prefault:
1237          type: boolean
1238
1239    ReceiveMigrationData:
1240      required:
1241        - receiver_url
1242      type: object
1243      properties:
1244        receiver_url:
1245          type: string
1246
1247    SendMigrationData:
1248      required:
1249        - destination_url
1250      type: object
1251      properties:
1252        destination_url:
1253          type: string
1254        local:
1255          type: boolean
1256
1257    VmAddUserDevice:
1258      required:
1259        - socket
1260      type: object
1261      properties:
1262        socket:
1263          type: string
1264