Line 10:
Line 10:
required criu_req_type type = 1;
required criu_req_type type = 1;
−
optional criu_dump_req dump = 2;
+
optional criu_opts opts = 2;
}
}
</pre>
</pre>
==== criu_req_type ====
==== criu_req_type ====
−
There is only 1 request/response type for now.
+
There are only 2 request/response types for now.
<pre>enum criu_req_type {
<pre>enum criu_req_type {
EMPTY = 0;
EMPTY = 0;
DUMP = 1;
DUMP = 1;
+
RESTORE = 2;
}
}
</pre>
</pre>
−
==== criu_dump_req ====
+
==== criu_opts ====
−
It is used to store dump options.
+
It is used to store options.
−
<pre>message criu_dump_req {
+
<pre>message criu_opts {
required int32 images_dir_fd = 1;
required int32 images_dir_fd = 1;
optional int32 pid = 2;
optional int32 pid = 2;
Line 35:
Line 36:
optional bool file_locks = 8;
optional bool file_locks = 8;
optional int32 log_level = 9 [default = 2];
optional int32 log_level = 9 [default = 2];
+
optional string log_file = 10;
}</pre>
}</pre>
−
If no pid is set, CRIU will dump client process by default.
+
If no pid is set and type is DUMP, CRIU will dump client process by default.
Note: Whole tree <pid> must have the same uid, as a client, or client's uid must be == 0, otherwise CRIU won't dump nothing at all.
Note: Whole tree <pid> must have the same uid, as a client, or client's uid must be == 0, otherwise CRIU won't dump nothing at all.
Only images_dir_fd is required, all other fields may not be set.
Only images_dir_fd is required, all other fields may not be set.
−
Client must open directory for images by himself and set images_dir_fd to it's fd.
+
Client must open directory for/with images by himself and set images_dir_fd to it's fd.
CRIU will open /proc/<client's_pid>/fd/<images_dir_fd>, so it will work, if client is in another namespace.
CRIU will open /proc/<client's_pid>/fd/<images_dir_fd>, so it will work, if client is in another namespace.
−
For other options description, please run "criu -h".
+
The logic of setting request is the same as when setting options in console. Here is an example:
+
<pre>#criu restore -D /path/to/imgs_dir -v4 -o restore.log</pre>
+
is equal to:
+
<pre>
+
request.type = RESTORE;
+
+
request.opts.imgs_dir_fd = open("/path/to/imgs_dir")
+
request.opts.log_level = 4
+
request.opts.log_file = "restore.log"
+
</pre>
=== Response ===
=== Response ===
Line 53:
Line 64:
optional criu_dump_resp dump = 3;
optional criu_dump_resp dump = 3;
+
optional criu_restore_resp restore = 4;
}
}
</pre>
</pre>
+
Field "success" reports result of processing request, while criu_***_resp store some request-specific information.
==== criu_dump_resp ====
==== criu_dump_resp ====
−
criu_dump_resp is used to store response from CRIU.
+
criu_dump_resp is used to store dump response from CRIU.
<pre>
<pre>
message criu_dump_resp {
message criu_dump_resp {
Line 65:
Line 78:
Field "restored" is set to "true" if process was restored.
Field "restored" is set to "true" if process was restored.
+
==== criu_restore_resp ====
+
<pre>
+
message criu_restore_resp {
+
required int32 pid = 1;
+
}
+
</pre>
+
Field "pid" is set to the PID of the restored process.
== Run ==
== Run ==
=== Server ===
=== Server ===
−
On a server side, CRIU creates SOCK_SEQPACKET Unix socket and listens for connections on it. After receiving criu_req, CRIU processes it, do what is requested and sends criu_resp back.
+
On a server side, CRIU creates SOCK_SEQPACKET Unix socket and listens for connections on it. After receiving criu_req, CRIU processes it, do what is requested and sends criu_resp with set request-specific criu_***_resp field back.
+
If CRIU gets unknown type of request, it will return criu_resp with type == EMPTY and success == false.
To launch service server run:
To launch service server run:
<pre>#criu service --address <socket_address></pre>
<pre>#criu service --address <socket_address></pre>
+
+
Note that you can set suid flag on criu and run it as non-root user, but it will be able to serve only tasks with the same user's uid.
If no address is set, "/tmp/criu_service.socket" is used by default.
If no address is set, "/tmp/criu_service.socket" is used by default.
−
You may also like to demonize server(-d), set log level(-v<N>) or set log file(-o <logname>).
+
You may also like to demonize server(-d), set log level(-v<N>) or set log file(-o <logname>). Server log file wouldn't be very informative for now, though.
For the full list of options, please run "criu -h".
For the full list of options, please run "criu -h".