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