1 /*
2  * libvirt-gconfig-domain.h: libvirt domain configuration
3  *
4  * Copyright (C) 2010-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: Daniel P. Berrange <berrange@redhat.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_H__
28 #define __LIBVIRT_GCONFIG_DOMAIN_H__
29 
30 #include <libvirt-gconfig/libvirt-gconfig-domain-clock.h>
31 #include <libvirt-gconfig/libvirt-gconfig-domain-os.h>
32 #include <libvirt-gconfig/libvirt-gconfig-domain-device.h>
33 #include <libvirt-gconfig/libvirt-gconfig-domain-seclabel.h>
34 #include <libvirt-gconfig/libvirt-gconfig-domain-cpu.h>
35 #include <libvirt-gconfig/libvirt-gconfig-domain-power-management.h>
36 
37 G_BEGIN_DECLS
38 
39 #define GVIR_CONFIG_TYPE_DOMAIN            (gvir_config_domain_get_type ())
40 #define GVIR_CONFIG_DOMAIN(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN, GVirConfigDomain))
41 #define GVIR_CONFIG_DOMAIN_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN, GVirConfigDomainClass))
42 #define GVIR_CONFIG_IS_DOMAIN(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN))
43 #define GVIR_CONFIG_IS_DOMAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN))
44 #define GVIR_CONFIG_DOMAIN_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN, GVirConfigDomainClass))
45 
46 typedef struct _GVirConfigDomain GVirConfigDomain;
47 typedef struct _GVirConfigDomainPrivate GVirConfigDomainPrivate;
48 typedef struct _GVirConfigDomainClass GVirConfigDomainClass;
49 
50 struct _GVirConfigDomain
51 {
52     GVirConfigObject parent;
53 
54     GVirConfigDomainPrivate *priv;
55 
56     /* Do not add fields to this struct */
57 };
58 
59 struct _GVirConfigDomainClass
60 {
61     GVirConfigObjectClass parent_class;
62 
63     gpointer padding[20];
64 };
65 
66 typedef enum {
67     GVIR_CONFIG_DOMAIN_VIRT_QEMU,
68     GVIR_CONFIG_DOMAIN_VIRT_KQEMU,
69     GVIR_CONFIG_DOMAIN_VIRT_KVM,
70     GVIR_CONFIG_DOMAIN_VIRT_XEN,
71     GVIR_CONFIG_DOMAIN_VIRT_LXC,
72     GVIR_CONFIG_DOMAIN_VIRT_UML,
73     GVIR_CONFIG_DOMAIN_VIRT_OPENVZ,
74     GVIR_CONFIG_DOMAIN_VIRT_VSERVER,
75     GVIR_CONFIG_DOMAIN_VIRT_LDOM,
76     GVIR_CONFIG_DOMAIN_VIRT_TEST,
77     GVIR_CONFIG_DOMAIN_VIRT_VMWARE,
78     GVIR_CONFIG_DOMAIN_VIRT_HYPERV,
79     GVIR_CONFIG_DOMAIN_VIRT_VBOX,
80     GVIR_CONFIG_DOMAIN_VIRT_ONE,
81     GVIR_CONFIG_DOMAIN_VIRT_PHYP
82 } GVirConfigDomainVirtType;
83 
84 typedef enum {
85     GVIR_CONFIG_DOMAIN_LIFECYCLE_ON_POWEROFF, /*< nick=on_poweroff >*/
86     GVIR_CONFIG_DOMAIN_LIFECYCLE_ON_REBOOT, /*< nick=on_reboot >*/
87     GVIR_CONFIG_DOMAIN_LIFECYCLE_ON_CRASH /*< nick=on_crash >*/
88 } GVirConfigDomainLifecycleEvent;
89 
90 typedef enum {
91     GVIR_CONFIG_DOMAIN_LIFECYCLE_DESTROY,
92     GVIR_CONFIG_DOMAIN_LIFECYCLE_RESTART,
93     GVIR_CONFIG_DOMAIN_LIFECYCLE_PRESERVE,
94     GVIR_CONFIG_DOMAIN_LIFECYCLE_RENAME_RESTART,
95     GVIR_CONFIG_DOMAIN_LIFECYCLE_COREDUMP_DESTROY,
96     GVIR_CONFIG_DOMAIN_LIFECYCLE_COREDUMP_RESTART
97 } GVirConfigDomainLifecycleAction;
98 
99 GType gvir_config_domain_get_type(void);
100 
101 GVirConfigDomain *gvir_config_domain_new_from_xml(const gchar *xml, GError **error);
102 GVirConfigDomain *gvir_config_domain_new(void);
103 
104 GVirConfigDomainVirtType gvir_config_domain_get_virt_type(GVirConfigDomain *domain);
105 void gvir_config_domain_set_virt_type(GVirConfigDomain *domain, GVirConfigDomainVirtType type);
106 const char *gvir_config_domain_get_name(GVirConfigDomain *domain);
107 void gvir_config_domain_set_name(GVirConfigDomain *domain, const char *name);
108 const char *gvir_config_domain_get_uuid(GVirConfigDomain *domain);
109 void gvir_config_domain_set_uuid(GVirConfigDomain *domain, const char *uuid);
110 const char *gvir_config_domain_get_description(GVirConfigDomain *domain);
111 void gvir_config_domain_set_description(GVirConfigDomain *domain, const char *description);
112 guint64 gvir_config_domain_get_memory(GVirConfigDomain *domain);
113 void gvir_config_domain_set_memory(GVirConfigDomain *domain, guint64 memory);
114 guint64 gvir_config_domain_get_current_memory(GVirConfigDomain *domain);
115 void gvir_config_domain_set_current_memory(GVirConfigDomain *domain, guint64 memory);
116 guint64 gvir_config_domain_get_vcpus(GVirConfigDomain *domain);
117 void gvir_config_domain_set_vcpus(GVirConfigDomain *domain,
118                                   guint64 vcpu_count);
119 GStrv gvir_config_domain_get_features(GVirConfigDomain *domain);
120 void gvir_config_domain_set_features(GVirConfigDomain *domain,
121                                      const GStrv features);
122 GVirConfigDomainClock *gvir_config_domain_get_clock(GVirConfigDomain *domain);
123 void gvir_config_domain_set_clock(GVirConfigDomain *domain,
124                                   GVirConfigDomainClock *klock);
125 GVirConfigDomainOs *gvir_config_domain_get_os(GVirConfigDomain *domain);
126 void gvir_config_domain_set_os(GVirConfigDomain *domain,
127                                GVirConfigDomainOs *os);
128 void gvir_config_domain_set_seclabel(GVirConfigDomain *domain,
129                                      GVirConfigDomainSeclabel *seclabel);
130 const char *gvir_config_domain_get_title(GVirConfigDomain *domain);
131 void gvir_config_domain_set_title(GVirConfigDomain *domain, const char *title);
132 void gvir_config_domain_set_devices(GVirConfigDomain *domain,
133                                     GList *devices);
134 void gvir_config_domain_add_device(GVirConfigDomain *domain,
135                                    GVirConfigDomainDevice *device);
136 GList *gvir_config_domain_get_devices(GVirConfigDomain *domain);
137 void gvir_config_domain_set_lifecycle(GVirConfigDomain *domain,
138                                       GVirConfigDomainLifecycleEvent event,
139                                       GVirConfigDomainLifecycleAction action);
140 gboolean gvir_config_domain_set_custom_xml_ns_children(GVirConfigDomain *domain,
141                                                        const gchar *xml,
142                                                        const gchar *ns,
143                                                        const gchar *ns_uri,
144                                                        GError **error);
145 gboolean gvir_config_domain_set_custom_xml(GVirConfigDomain *domain,
146                                            const gchar *xml,
147                                            const gchar *ns,
148                                            const gchar *ns_uri,
149                                            GError **error);
150 gchar *gvir_config_domain_get_custom_xml(GVirConfigDomain *domain,
151                                          const gchar *ns_uri);
152 GVirConfigDomainCpu *gvir_config_domain_get_cpu(GVirConfigDomain *domain);
153 void gvir_config_domain_set_cpu(GVirConfigDomain *domain,
154                                 GVirConfigDomainCpu *cpu);
155 void gvir_config_domain_set_power_management(GVirConfigDomain *domain,
156                                              GVirConfigDomainPowerManagement *pm);
157 
158 G_END_DECLS
159 
160 #endif /* __LIBVIRT_GCONFIG_DOMAIN_H__ */
161