1 /*
2  * virdomainobjlist.h: domain objects list utilities
3  *
4  * Copyright (C) 2006-2015 Red Hat, Inc.
5  * Copyright (C) 2006-2008 Daniel P. Berrange
6  * Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library.  If not, see
20  * <http://www.gnu.org/licenses/>.
21  */
22 
23 #pragma once
24 
25 #include "domain_conf.h"
26 
27 typedef struct _virDomainObjList virDomainObjList;
28 
29 virDomainObjList *virDomainObjListNew(void);
30 
31 virDomainObj *virDomainObjListFindByID(virDomainObjList *doms,
32                                          int id);
33 virDomainObj *virDomainObjListFindByUUID(virDomainObjList *doms,
34                                            const unsigned char *uuid);
35 virDomainObj *virDomainObjListFindByName(virDomainObjList *doms,
36                                            const char *name);
37 
38 enum {
39     VIR_DOMAIN_OBJ_LIST_ADD_LIVE = (1 << 0),
40     VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1),
41 };
42 virDomainObj *virDomainObjListAdd(virDomainObjList *doms,
43                                   virDomainDef **def,
44                                   virDomainXMLOption *xmlopt,
45                                   unsigned int flags,
46                                   virDomainDef **oldDef);
47 
48 typedef int (*virDomainObjListRenameCallback)(virDomainObj *dom,
49                                               const char *new_name,
50                                               unsigned int flags,
51                                               void *opaque);
52 int virDomainObjListRename(virDomainObjList *doms,
53                            virDomainObj *dom,
54                            const char *new_name,
55                            unsigned int flags,
56                            virDomainObjListRenameCallback callback,
57                            void *opaque);
58 
59 void virDomainObjListRemove(virDomainObjList *doms,
60                             virDomainObj *dom);
61 void virDomainObjListRemoveLocked(virDomainObjList *doms,
62                                   virDomainObj *dom);
63 
64 int virDomainObjListLoadAllConfigs(virDomainObjList *doms,
65                                    const char *configDir,
66                                    const char *autostartDir,
67                                    bool liveStatus,
68                                    virDomainXMLOption *xmlopt,
69                                    virDomainLoadConfigNotify notify,
70                                    void *opaque);
71 
72 int virDomainObjListNumOfDomains(virDomainObjList *doms,
73                                  bool active,
74                                  virDomainObjListACLFilter filter,
75                                  virConnectPtr conn);
76 
77 int virDomainObjListGetActiveIDs(virDomainObjList *doms,
78                                  int *ids,
79                                  int maxids,
80                                  virDomainObjListACLFilter filter,
81                                  virConnectPtr conn);
82 int virDomainObjListGetInactiveNames(virDomainObjList *doms,
83                                      char **const names,
84                                      int maxnames,
85                                      virDomainObjListACLFilter filter,
86                                      virConnectPtr conn);
87 
88 typedef int (*virDomainObjListIterator)(virDomainObj *dom,
89                                         void *opaque);
90 
91 int virDomainObjListForEach(virDomainObjList *doms,
92                             bool modify,
93                             virDomainObjListIterator callback,
94                             void *opaque);
95 
96 #define VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE \
97                 (VIR_CONNECT_LIST_DOMAINS_ACTIVE | \
98                  VIR_CONNECT_LIST_DOMAINS_INACTIVE)
99 
100 #define VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT \
101                 (VIR_CONNECT_LIST_DOMAINS_PERSISTENT | \
102                  VIR_CONNECT_LIST_DOMAINS_TRANSIENT)
103 
104 #define VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE \
105                 (VIR_CONNECT_LIST_DOMAINS_RUNNING | \
106                  VIR_CONNECT_LIST_DOMAINS_PAUSED  | \
107                  VIR_CONNECT_LIST_DOMAINS_SHUTOFF | \
108                  VIR_CONNECT_LIST_DOMAINS_OTHER)
109 
110 #define VIR_CONNECT_LIST_DOMAINS_FILTERS_MANAGEDSAVE \
111                 (VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE | \
112                  VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE)
113 
114 #define VIR_CONNECT_LIST_DOMAINS_FILTERS_AUTOSTART \
115                 (VIR_CONNECT_LIST_DOMAINS_AUTOSTART | \
116                  VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART)
117 
118 #define VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT \
119                 (VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT | \
120                  VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHOT)
121 
122 #define VIR_CONNECT_LIST_DOMAINS_FILTERS_CHECKPOINT \
123                 (VIR_CONNECT_LIST_DOMAINS_HAS_CHECKPOINT | \
124                  VIR_CONNECT_LIST_DOMAINS_NO_CHECKPOINT)
125 
126 #define VIR_CONNECT_LIST_DOMAINS_FILTERS_ALL \
127                 (VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE      | \
128                  VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT  | \
129                  VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE       | \
130                  VIR_CONNECT_LIST_DOMAINS_FILTERS_MANAGEDSAVE | \
131                  VIR_CONNECT_LIST_DOMAINS_FILTERS_AUTOSTART   | \
132                  VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT    | \
133                  VIR_CONNECT_LIST_DOMAINS_FILTERS_CHECKPOINT)
134 
135 int virDomainObjListCollect(virDomainObjList *doms,
136                             virConnectPtr conn,
137                             virDomainObj ***vms,
138                             size_t *nvms,
139                             virDomainObjListACLFilter filter,
140                             unsigned int flags);
141 int virDomainObjListExport(virDomainObjList *doms,
142                            virConnectPtr conn,
143                            virDomainPtr **domains,
144                            virDomainObjListACLFilter filter,
145                            unsigned int flags);
146 int virDomainObjListConvert(virDomainObjList *domlist,
147                             virConnectPtr conn,
148                             virDomainPtr *doms,
149                             size_t ndoms,
150                             virDomainObj ***vms,
151                             size_t *nvms,
152                             virDomainObjListACLFilter filter,
153                             unsigned int flags,
154                             bool skip_missing);
155