Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F133703708
D29213.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D29213.diff
View Options
Index: usr.sbin/bhyve/snapshot.h
===================================================================
--- usr.sbin/bhyve/snapshot.h
+++ usr.sbin/bhyve/snapshot.h
@@ -60,14 +60,29 @@
ucl_object_t *meta_root_obj;
};
+/* Filename that will be used for save/restore */
+struct checkpoint_op {
+ char snapshot_filename[MAX_SNAPSHOT_FILENAME];
+};
+
+/* Messages that a bhyve process understands. */
enum ipc_opcode {
START_CHECKPOINT,
START_SUSPEND,
};
-struct checkpoint_op {
- unsigned int op;
- char snapshot_filename[MAX_SNAPSHOT_FILENAME];
+/*
+ * The type of message and associated data to
+ * send to a bhyve process.
+ */
+struct ipc_message {
+ enum ipc_opcode code;
+ union {
+ /*
+ * message specific structures
+ */
+ struct checkpoint_op op;
+ } data;
};
struct checkpoint_thread_info {
Index: usr.sbin/bhyve/snapshot.c
===================================================================
--- usr.sbin/bhyve/snapshot.c
+++ usr.sbin/bhyve/snapshot.c
@@ -1441,16 +1441,16 @@
}
int
-handle_message(struct checkpoint_op *checkpoint_op, struct vmctx *ctx)
+handle_message(struct ipc_message *imsg, struct vmctx *ctx)
{
int err;
- switch (checkpoint_op->op) {
+ switch (imsg->code) {
case START_CHECKPOINT:
- err = vm_checkpoint(ctx, checkpoint_op->snapshot_filename, false);
+ err = vm_checkpoint(ctx, imsg->data.op.snapshot_filename, false);
break;
case START_SUSPEND:
- err = vm_checkpoint(ctx, checkpoint_op->snapshot_filename, true);
+ err = vm_checkpoint(ctx, imsg->data.op.snapshot_filename, true);
break;
default:
EPRINTLN("Unrecognized checkpoint operation\n");
@@ -1469,7 +1469,7 @@
void *
checkpoint_thread(void *param)
{
- struct checkpoint_op op;
+ struct ipc_message imsg;
struct checkpoint_thread_info *thread_info;
ssize_t n;
@@ -1477,14 +1477,14 @@
thread_info = (struct checkpoint_thread_info *)param;
for (;;) {
- n = recvfrom(thread_info->socket_fd, &op, sizeof(op), 0, NULL, 0);
+ n = recvfrom(thread_info->socket_fd, &imsg, sizeof(imsg), 0, NULL, 0);
/*
* slight sanity check: see if there's enough data to at
* least determine the type of message.
*/
- if (n >= sizeof(op.op))
- handle_message(&op, thread_info->ctx);
+ if (n >= sizeof(imsg.code))
+ handle_message(&imsg, thread_info->ctx);
else
EPRINTLN("Failed to receive message: %s\n",
n == -1 ? strerror(errno) : "unknown error");
Index: usr.sbin/bhyvectl/bhyvectl.c
===================================================================
--- usr.sbin/bhyvectl/bhyvectl.c
+++ usr.sbin/bhyvectl/bhyvectl.c
@@ -1684,7 +1684,7 @@
#ifdef BHYVE_SNAPSHOT
static int
-send_checkpoint_op_req(struct vmctx *ctx, struct checkpoint_op *op)
+send_message(struct vmctx *ctx, void *data, size_t len)
{
struct sockaddr_un addr;
ssize_t len_sent;
@@ -1709,7 +1709,7 @@
snprintf(addr.sun_path, sizeof(addr.sun_path), "%s%s", BHYVE_RUN_DIR, vmname_buf);
- len_sent = sendto(socket_fd, op, sizeof(*op), 0,
+ len_sent = sendto(socket_fd, data, len, 0,
(struct sockaddr *)&addr, sizeof(struct sockaddr_un));
if (len_sent < 0) {
@@ -1726,12 +1726,15 @@
static int
snapshot_request(struct vmctx *ctx, const char *file, enum ipc_opcode code)
{
- struct checkpoint_op op;
+ struct ipc_message imsg;
+ size_t length;
- op.op = code;
- strlcpy(op.snapshot_filename, file, MAX_SNAPSHOT_FILENAME);
+ imsg.code = code;
+ strlcpy(imsg.data.op.snapshot_filename, file, MAX_SNAPSHOT_FILENAME);
- return (send_checkpoint_op_req(ctx, &op));
+ length = offsetof(struct ipc_message, data) + sizeof(imsg.data.op);
+
+ return (send_message(ctx, (void *)&imsg, length));
}
#endif
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Oct 28, 5:42 PM (3 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24365962
Default Alt Text
D29213.diff (3 KB)
Attached To
Mode
D29213: bhyve/snapshot: provide a way to send other messages/data to bhyve
Attached
Detach File
Event Timeline
Log In to Comment