aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxen/include/xen_pbd.h
blob: 335d20b2ff419ccee7575f78db487f5ee8156c41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
/*
 * Copyright (c) 2006-2007, XenSource Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
 */

#ifndef XEN_PBD_H
#define XEN_PBD_H

#include "xen_common.h"
#include "xen_host_decl.h"
#include "xen_pbd_decl.h"
#include "xen_sr_decl.h"
#include "xen_string_string_map.h"


/*
 * The PBD class.
 * 
 * The physical block devices through which hosts access SRs.
 */


/**
 * Free the given xen_pbd.  The given handle must have been allocated
 * by this library.
 */
extern void
xen_pbd_free(xen_pbd pbd);


typedef struct xen_pbd_set
{
    size_t size;
    xen_pbd *contents[];
} xen_pbd_set;

/**
 * Allocate a xen_pbd_set of the given size.
 */
extern xen_pbd_set *
xen_pbd_set_alloc(size_t size);

/**
 * Free the given xen_pbd_set.  The given set must have been allocated
 * by this library.
 */
extern void
xen_pbd_set_free(xen_pbd_set *set);


typedef struct xen_pbd_record
{
    xen_pbd handle;
    char *uuid;
    struct xen_host_record_opt *host;
    struct xen_sr_record_opt *sr;
    xen_string_string_map *device_config;
    bool currently_attached;
} xen_pbd_record;

/**
 * Allocate a xen_pbd_record.
 */
extern xen_pbd_record *
xen_pbd_record_alloc(void);

/**
 * Free the given xen_pbd_record, and all referenced values.  The given
 * record must have been allocated by this library.
 */
extern void
xen_pbd_record_free(xen_pbd_record *record);


typedef struct xen_pbd_record_opt
{
    bool is_record;
    union
    {
        xen_pbd handle;
        xen_pbd_record *record;
    } u;
} xen_pbd_record_opt;

/**
 * Allocate a xen_pbd_record_opt.
 */
extern xen_pbd_record_opt *
xen_pbd_record_opt_alloc(void);

/**
 * Free the given xen_pbd_record_opt, and all referenced values.  The
 * given record_opt must have been allocated by this library.
 */
extern void
xen_pbd_record_opt_free(xen_pbd_record_opt *record_opt);


typedef struct xen_pbd_record_set
{
    size_t size;
    xen_pbd_record *contents[];
} xen_pbd_record_set;

/**
 * Allocate a xen_pbd_record_set of the given size.
 */
extern xen_pbd_record_set *
xen_pbd_record_set_alloc(size_t size);

/**
 * Free the given xen_pbd_record_set, and all referenced values.  The
 * given set must have been allocated by this library.
 */
extern void
xen_pbd_record_set_free(xen_pbd_record_set *set);



typedef struct xen_pbd_record_opt_set
{
    size_t size;
    xen_pbd_record_opt *contents[];
} xen_pbd_record_opt_set;

/**
 * Allocate a xen_pbd_record_opt_set of the given size.
 */
extern xen_pbd_record_opt_set *
xen_pbd_record_opt_set_alloc(size_t size);

/**
 * Free the given xen_pbd_record_opt_set, and all referenced values. 
 * The given set must have been allocated by this library.
 */
extern void
xen_pbd_record_opt_set_free(xen_pbd_record_opt_set *set);


/**
 * Get a record containing the current state of the given PBD.
 */
extern bool
xen_pbd_get_record(xen_session *session, xen_pbd_record **result, xen_pbd pbd);


/**
 * Get a reference to the PBD instance with the specified UUID.
 */
extern bool
xen_pbd_get_by_uuid(xen_session *session, xen_pbd *result, char *uuid);


/**
 * Create a new PBD instance, and return its handle.
 */
extern bool
xen_pbd_create(xen_session *session, xen_pbd *result, xen_pbd_record *record);


/**
 * Destroy the specified PBD instance.
 */
extern bool
xen_pbd_destroy(xen_session *session, xen_pbd pbd);


/**
 * Get the uuid field of the given PBD.
 */
extern bool
xen_pbd_get_uuid(xen_session *session, char **result, xen_pbd pbd);


/**
 * Get the host field of the given PBD.
 */
extern bool
xen_pbd_get_host(xen_session *session, xen_host *result, xen_pbd pbd);


/**
 * Get the SR field of the given PBD.
 */
extern bool
xen_pbd_get_sr(xen_session *session, xen_sr *result, xen_pbd pbd);


/**
 * Get the device_config field of the given PBD.
 */
extern bool
xen_pbd_get_device_config(xen_session *session, xen_string_string_map **result, xen_pbd pbd);


/**
 * Get the currently_attached field of the given PBD.
 */
extern bool
xen_pbd_get_currently_attached(xen_session *session, bool *result, xen_pbd pbd);


/**
 * Return a list of all the PBDs known to the system.
 */
extern bool
xen_pbd_get_all(xen_session *session, struct xen_pbd_set **result);


#endif