66
66
#include "vnetwork.h"
69
#include <windows-bundle.h>
69
71
#define LIBVIRT_QUERY_RETRIES 5
70
72
#define MAXDOMS 1024
71
#define BYTES_PER_DISK_UNIT 1048576 /* disk stats are in Gigs */
72
#define SWAP_SIZE 512 /* for now, the only possible swap size, in MBs */
73
#define BYTES_PER_DISK_UNIT 1073741824 // describeResource disk units are GBs
74
#define MB_PER_DISK_UNIT 1024 // describeResource disk units are GBs
75
77
struct nc_state_t {
76
78
struct handlers *H; // selected handler
77
79
struct handlers *D; // default handler
80
hypervisorCapabilityType capability;
78
81
vnetConfig *vnetconfig; // network config
80
int config_network_port;
81
83
char admin_user_id[CHAR_BUFFER_SIZE];
82
84
int save_instance_files;
83
85
char uri[CHAR_BUFFER_SIZE];
86
char iqn[CHAR_BUFFER_SIZE];
84
87
virConnectPtr conn;
88
boolean convert_to_disk;
89
boolean do_inject_key;
90
int concurrent_disk_ops;
87
long long config_max_disk;
88
92
long long config_max_mem;
89
93
long long config_max_cores;
95
99
char home[MAX_PATH];
96
100
char config_network_path [MAX_PATH];
97
char gen_libvirt_cmd_path[MAX_PATH];
101
char libvirt_xslt_path[MAX_PATH];
98
102
char get_info_cmd_path[MAX_PATH];
99
103
char rootwrap_cmd_path[MAX_PATH];
100
104
char virsh_cmd_path[MAX_PATH];
101
105
char xm_cmd_path[MAX_PATH];
102
106
char detach_cmd_path[MAX_PATH];
103
char connect_storage_cmd_path[MAX_PATH];
104
char disconnect_storage_cmd_path[MAX_PATH];
105
char get_storage_cmd_path[MAX_PATH];
107
108
int config_use_virtio_net; // KVM: use virtio for network
108
109
int config_use_virtio_disk; // KVM: use virtio for disk attachment
109
110
int config_use_virtio_root; // KVM: use virtio for root partition
112
char ncBundleUploadCmd[MAX_PATH];
113
char ncCheckBucketCmd[MAX_PATH];
114
char ncDeleteBundleCmd[MAX_PATH];
113
118
struct handlers {
114
119
char name [CHAR_BUFFER_SIZE];
115
120
int (*doInitialize) (struct nc_state_t *nc);
121
int (*doAssignAddress) (struct nc_state_t *nc,
116
125
int (*doPowerDown) (struct nc_state_t *nc,
117
126
ncMetadata *meta);
118
127
int (*doDescribeInstances) (struct nc_state_t *nc,
194
int (*doCreateImage) (struct nc_state_t *nc,
199
int (*doBundleInstance) (struct nc_state_t *nc,
208
int (*doCancelBundleTask) (struct nc_state_t *nc,
211
int (*doDescribeBundleTasks) (struct nc_state_t *nc,
215
bundleTask ***outBundleTasks,
216
int *outBundleTasksLen);
179
219
#ifdef HANDLERS_FANOUT // only declare for the fanout code, not the actual handlers
220
int doAssignAddress (ncMetadata *meta, char *instanceId, char *publicIp);
180
221
int doPowerDown (ncMetadata *meta);
181
222
int doDescribeInstances (ncMetadata *meta, char **instIds, int instIdsLen, ncInstance ***outInsts, int *outInstsLen);
182
int doRunInstance (ncMetadata *meta, char *instanceId, char *reservationId, virtualMachine *params, char *imageId, char *imageURL, char *kernelId, char *kernelURL, char *ramdiskId, char *ramdiskURL, char *keyName, netConfig *netparams, char *userData, char *launchIndex, char **groupNames, int groupNamesSize, ncInstance **outInst);
183
int doTerminateInstance (ncMetadata *meta, char *instanceId, int *shutdownState, int *previousState);
223
int doRunInstance (ncMetadata *meta, char *uuid, char *instanceId, char *reservationId, virtualMachine *params, char *imageId, char *imageURL, char *kernelId, char *kernelURL, char *ramdiskId, char *ramdiskURL, char *ownerId, char *accountId, char *keyName, netConfig *netparams, char *userData, char *launchIndex, char *platform, int expiryTime, char **groupNames, int groupNamesSize, ncInstance **outInst);
224
int doTerminateInstance (ncMetadata *meta, char *instanceId, int force, int *shutdownState, int *previousState);
184
225
int doRebootInstance (ncMetadata *meta, char *instanceId);
185
226
int doGetConsoleOutput (ncMetadata *meta, char *instanceId, char **consoleOutput);
186
227
int doDescribeResource (ncMetadata *meta, char *resourceType, ncResource **outRes);
187
int doStartNetwork (ncMetadata *ccMeta, char **remoteHosts, int remoteHostsLen, int port, int vlan);
228
int doStartNetwork (ncMetadata *ccMeta, char *uuid, char **remoteHosts, int remoteHostsLen, int port, int vlan);
188
229
int doAttachVolume (ncMetadata *meta, char *instanceId, char *volumeId, char *remoteDev, char *localDev);
189
int doDetachVolume (ncMetadata *meta, char *instanceId, char *volumeId, char *remoteDev, char *localDev, int force);
230
int doDetachVolume (ncMetadata *meta, char *instanceId, char *volumeId, char *remoteDev, char *localDev, int force, int grab_inst_sem);
231
int doBundleInstance (ncMetadata *meta, char *instanceId, char *bucketName, char *filePrefix, char *walrusURL, char *userPublicKey, char *S3Policy, char *S3PolicySig);
232
int doCancelBundleTask (ncMetadata *meta, char *instanceId);
233
int doDescribeBundleTasks (ncMetadata *meta, char **instIds, int instIdsLen, bundleTask ***outBundleTasks, int *outBundleTasksLen);
234
int doCreateImage (ncMetadata *meta, char *instanceId, char *volumeId, char *remoteDev);
190
236
#endif /* HANDLERS_FANOUT */
238
int callBundleInstanceHelper(struct nc_state_t *nc, char *instanceId, char *bucketName, char *filePrefix, char *walrusURL, char *userPublicKey, char *S3Policy, char *S3PolicySig);
192
240
/* helper functions used by the low level handlers */
193
241
int get_value( char *s,
194
242
const char *name,
195
243
long long *valp);
196
int convert_dev_names( char *localDev,
244
int convert_dev_names( const char *localDev,
197
245
char *localDevReal,
198
246
char *localDevTag);
199
247
void libvirt_error_handler( void * userData,
223
271
void * monitoring_thread( void *arg);
224
272
void * startup_thread( void *arg);
226
int check_iscsi(char* dev_string);
227
void parse_target(char *dev_string);
228
char* connect_iscsi_target(const char *storage_cmd_path, char *dev_string);
229
int disconnect_iscsi_target(const char *storage_cmd_path, char *dev_string);
230
char* get_iscsi_target(const char *storage_cmd_path, char *dev_string);
274
int get_instance_stats(virDomainPtr dom, ncInstance *instance);
275
ncInstance * find_global_instance (const char * instanceId);
276
int find_and_terminate_instance (struct nc_state_t *nc_state, ncMetadata *meta, char *instanceId, int force, ncInstance **instance_p, char destroy);
232
278
// bundling structure
233
279
struct bundling_params_t {