1 /*
2  * libvirt-gconfig-domain-disk.h: libvirt domain disk configuration
3  *
4  * Copyright (C) 2011 Red Hat, Inc.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library. If not, see
18  * <http://www.gnu.org/licenses/>.
19  *
20  * Author: Christophe Fergeau <cfergeau@gmail.com>
21  */
22 
23 #if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD)
24 #error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included directly."
25 #endif
26 
27 #ifndef __LIBVIRT_GCONFIG_DOMAIN_DISK_H__
28 #define __LIBVIRT_GCONFIG_DOMAIN_DISK_H__
29 
30 G_BEGIN_DECLS
31 
32 #include <libvirt-gconfig/libvirt-gconfig-domain-disk-driver.h>
33 
34 #define GVIR_CONFIG_TYPE_DOMAIN_DISK            (gvir_config_domain_disk_get_type ())
35 #define GVIR_CONFIG_DOMAIN_DISK(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN_DISK, GVirConfigDomainDisk))
36 #define GVIR_CONFIG_DOMAIN_DISK_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN_DISK, GVirConfigDomainDiskClass))
37 #define GVIR_CONFIG_IS_DOMAIN_DISK(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN_DISK))
38 #define GVIR_CONFIG_IS_DOMAIN_DISK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN_DISK))
39 #define GVIR_CONFIG_DOMAIN_DISK_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN_DISK, GVirConfigDomainDiskClass))
40 
41 typedef struct _GVirConfigDomainDisk GVirConfigDomainDisk;
42 typedef struct _GVirConfigDomainDiskPrivate GVirConfigDomainDiskPrivate;
43 typedef struct _GVirConfigDomainDiskClass GVirConfigDomainDiskClass;
44 
45 struct _GVirConfigDomainDisk
46 {
47     GVirConfigDomainDevice parent;
48 
49     GVirConfigDomainDiskPrivate *priv;
50 
51     /* Do not add fields to this struct */
52 };
53 
54 struct _GVirConfigDomainDiskClass
55 {
56     GVirConfigDomainDeviceClass parent_class;
57 
58     gpointer padding[20];
59 };
60 
61 typedef enum {
62     GVIR_CONFIG_DOMAIN_DISK_FILE,
63     GVIR_CONFIG_DOMAIN_DISK_BLOCK,
64     GVIR_CONFIG_DOMAIN_DISK_DIR,
65     GVIR_CONFIG_DOMAIN_DISK_NETWORK
66 } GVirConfigDomainDiskType;
67 
68 typedef enum {
69     GVIR_CONFIG_DOMAIN_DISK_BUS_IDE,
70     GVIR_CONFIG_DOMAIN_DISK_BUS_FDC,
71     GVIR_CONFIG_DOMAIN_DISK_BUS_SCSI,
72     GVIR_CONFIG_DOMAIN_DISK_BUS_VIRTIO,
73     GVIR_CONFIG_DOMAIN_DISK_BUS_XEN,
74     GVIR_CONFIG_DOMAIN_DISK_BUS_USB,
75     GVIR_CONFIG_DOMAIN_DISK_BUS_UML,
76     GVIR_CONFIG_DOMAIN_DISK_BUS_SATA
77 } GVirConfigDomainDiskBus;
78 
79 typedef enum {
80     GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_DISK,
81     GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_FLOPPY,
82     GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_CDROM
83 } GVirConfigDomainDiskGuestDeviceType;
84 
85 typedef enum {
86     GVIR_CONFIG_DOMAIN_DISK_SNAPSHOT_NO,
87     GVIR_CONFIG_DOMAIN_DISK_SNAPSHOT_INTERNAL,
88     GVIR_CONFIG_DOMAIN_DISK_SNAPSHOT_EXTERNAL
89 } GVirConfigDomainDiskSnapshotType;
90 
91 typedef enum {
92     GVIR_CONFIG_DOMAIN_DISK_STARTUP_POLICY_MANDATORY,
93     GVIR_CONFIG_DOMAIN_DISK_STARTUP_POLICY_REQUISITE,
94     GVIR_CONFIG_DOMAIN_DISK_STARTUP_POLICY_OPTIONAL
95 } GVirConfigDomainDiskStartupPolicy;
96 
97 /* backward compatibility */
98 #define GVIR_CONFIG_DOMAIN_DISK_FORMAT_AIO GVIR_CONFIG_DOMAIN_DISK_FORMAT_RAW;
99 
100 GType gvir_config_domain_disk_get_type(void);
101 
102 GVirConfigDomainDisk *gvir_config_domain_disk_new(void);
103 GVirConfigDomainDisk *gvir_config_domain_disk_new_from_xml(const gchar *xml,
104                                                            GError **error);
105 
106 void gvir_config_domain_disk_set_type(GVirConfigDomainDisk *disk,
107                                       GVirConfigDomainDiskType type);
108 void gvir_config_domain_disk_set_guest_device_type(GVirConfigDomainDisk *disk,
109                                                    GVirConfigDomainDiskGuestDeviceType type);
110 void gvir_config_domain_disk_set_snapshot_type(GVirConfigDomainDisk *disk,
111                                                GVirConfigDomainDiskSnapshotType type);
112 void gvir_config_domain_disk_set_startup_policy(GVirConfigDomainDisk *disk,
113                                                 GVirConfigDomainDiskStartupPolicy policy);
114 void gvir_config_domain_disk_set_source(GVirConfigDomainDisk *disk,
115                                         const char *source);
116 G_DEPRECATED_FOR(gvir_config_domain_disk_driver_set_cache)
117 void gvir_config_domain_disk_set_driver_cache(GVirConfigDomainDisk *disk,
118                                               GVirConfigDomainDiskCacheType cache_type);
119 G_DEPRECATED_FOR(gvir_config_domain_disk_driver_set_name)
120 void gvir_config_domain_disk_set_driver_name(GVirConfigDomainDisk *disk,
121                                              const char *driver_name);
122 G_DEPRECATED_FOR(gvir_config_domain_disk_driver_set_format)
123 void gvir_config_domain_disk_set_driver_type(GVirConfigDomainDisk *disk,
124                                              const char *driver_type);
125 G_DEPRECATED_FOR(gvir_config_domain_disk_driver_set_format)
126 void gvir_config_domain_disk_set_driver_format(GVirConfigDomainDisk *disk,
127                                                GVirConfigDomainDiskFormat format);
128 void gvir_config_domain_disk_set_target_bus(GVirConfigDomainDisk *disk,
129                                             GVirConfigDomainDiskBus bus);
130 void gvir_config_domain_disk_set_target_dev(GVirConfigDomainDisk *disk,
131                                             const char *dev);
132 void gvir_config_domain_disk_set_driver(GVirConfigDomainDisk *disk,
133                                         GVirConfigDomainDiskDriver *driver);
134 GVirConfigDomainDiskDriver *gvir_config_domain_disk_get_driver(GVirConfigDomainDisk *disk);
135 
136 GVirConfigDomainDiskType gvir_config_domain_disk_get_disk_type(GVirConfigDomainDisk *disk);
137 GVirConfigDomainDiskGuestDeviceType gvir_config_domain_disk_get_guest_device_type(GVirConfigDomainDisk *disk);
138 GVirConfigDomainDiskSnapshotType gvir_config_domain_disk_get_snapshot_type(GVirConfigDomainDisk *disk);
139 GVirConfigDomainDiskStartupPolicy gvir_config_domain_disk_get_startup_policy(GVirConfigDomainDisk *disk);
140 const char *gvir_config_domain_disk_get_source(GVirConfigDomainDisk *disk);
141 G_DEPRECATED_FOR(gvir_config_domain_disk_driver_get_cache)
142 GVirConfigDomainDiskCacheType gvir_config_domain_disk_get_driver_cache(GVirConfigDomainDisk *disk);
143 G_DEPRECATED_FOR(gvir_config_domain_disk_driver_get_name)
144 const char *gvir_config_domain_disk_get_driver_name(GVirConfigDomainDisk *disk);
145 G_DEPRECATED_FOR(gvir_config_domain_disk_driver_get_format)
146 const char *gvir_config_domain_disk_get_driver_type(GVirConfigDomainDisk *disk);
147 G_DEPRECATED_FOR(gvir_config_domain_disk_driver_get_format)
148 GVirConfigDomainDiskFormat gvir_config_domain_disk_get_driver_format(GVirConfigDomainDisk *disk);
149 GVirConfigDomainDiskBus gvir_config_domain_disk_get_target_bus(GVirConfigDomainDisk *disk);
150 const char *gvir_config_domain_disk_get_target_dev(GVirConfigDomainDisk *disk);
151 void gvir_config_domain_disk_set_readonly(GVirConfigDomainDisk *disk,
152                                           gboolean readonly);
153 
154 G_END_DECLS
155 
156 #endif /* __LIBVIRT_GCONFIG_DOMAIN_DISK_H__ */
157