/* * V3 checkpoint send (live-migration) utility */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "v3_ctrl.h" #define MAX_STORE_LEN 128 #define MAX_URL_LEN 256 struct v3_chkpt_info chkpt; int main(int argc, char* argv[]) { int vm_fd; char * vm_dev = NULL; if (argc < 4) { printf("Usage: ./v3_send [optionmask]\n"); printf(" optionmask consists of the sum of any of the following\n"); printf(" 0 none\n"); printf(" 1 skip memory\n"); printf(" 2 skip devices\n"); printf(" 4 skip cores\n"); printf(" 8 skip architecture-specific core state\n"); return -1; } vm_dev = argv[1]; if (strlen(argv[2]) >= MAX_STORE_LEN) { printf("ERROR: Checkpoint store name longer than maximum size (%d)\n", MAX_STORE_LEN); return -1; } strncpy(chkpt.store, argv[2], MAX_STORE_LEN); if (strlen(argv[3]) >= MAX_URL_LEN) { printf("ERROR: Checkpoint URL longer than maximum size (%d)\n", MAX_URL_LEN); return -1; } strncpy(chkpt.url, argv[3], MAX_URL_LEN); if (argc>4) { chkpt.opts = atoll(argv[4]); } else { chkpt.opts = V3_CHKPT_OPT_NONE; } vm_fd = open(vm_dev, O_RDONLY); if (vm_fd == -1) { printf("Error opening VM device: %s\n", vm_dev); return -1; } if (ioctl(vm_fd, V3_VM_SEND, &chkpt)<0) { printf("Error sending the VM\n"); return -1; } /* Close the file descriptor. */ close(vm_fd); return 0; }