Line 4:
Line 4:
Well described here: [[Self_dump]].
Well described here: [[Self_dump]].
−
== Protocol Buffers ==
+
== CRIU request ==
−
See protobuf/criu-rpc.proto.
+
criu_req is used to wrap requests to provide compatibility with an older versions of rpc.
−
There are three types of structures for now:
+
Any request must be wrapped into criu_req to send to criu.
−
=== Dump request ===
+
−
criu_dump_req is used to store dump options from client.
+
<pre>
+
message criu_req {
+
required criu_req_type type = 1;
+
+
optional criu_dump_req dump = 2;
+
}
+
</pre>
+
+
There is only 1 request/response type for now.
+
<pre>enum criu_req_type {
+
EMPTY = 0;
+
DUMP = 1;
+
}
+
</pre>
+
=== CRIU dump request ===
+
criu_dump_req is used to store dump options.
<pre>message criu_dump_req {
<pre>message criu_dump_req {
−
optional int32 pid = 1;
+
required int32 images_dir_fd = 1;
−
optional bool leave_running = 2;
+
optional int32 pid = 2;
−
optional bool ext_unix_sk = 3;
+
−
optional bool tcp_established = 4;
+
optional bool leave_running = 3;
−
optional bool evasive_devices = 5;
+
optional bool ext_unix_sk = 4;
−
optional bool shell_job = 6;
+
optional bool tcp_established = 5;
−
optional bool file_locks = 7;
+
optional bool evasive_devices = 6;
−
required int32 images_dir_fd = 8;
+
optional bool shell_job = 7;
+
optional bool file_locks = 8;
optional int32 log_level = 9 [default = 2];
optional int32 log_level = 9 [default = 2];
}</pre>
}</pre>
Line 30:
Line 46:
For other options description, please run "criu -h".
For other options description, please run "criu -h".
−
=== Dump response ===
+
== CRIU response ==
+
criu_resp is a wrapper for responses. It consists of success bool field, response type field and response, that depends on sent request type.
+
<pre>message criu_resp {
+
required criu_req_type type = 1;
+
required bool success = 2;
+
+
optional criu_dump_resp dump = 3;
+
}
+
</pre>
+
=== CRIU dump response ===
criu_dump_resp is used to store response from CRIU.
criu_dump_resp is used to store response from CRIU.
<pre>
<pre>
message criu_dump_resp {
message criu_dump_resp {
−
required bool success = 1;
+
optional bool restored = 1;
−
optional bool restored = 2;
}
}
</pre>
</pre>
Field "restored" is set to "true" if process was restored.
Field "restored" is set to "true" if process was restored.
−
−
=== CRIU msg ===
−
criu_msg is a wrapper for other two structures to pass them through the socket.
−
<pre>
−
message criu_msg {
−
enum Type {
−
EMPTY = 0;
−
DUMPREQ = 1;
−
DUMPRESP = 2;
−
}
−
−
required Type type = 1;
−
−
optional criu_dump_req dump_req = 2;
−
optional criu_dump_resp dump_resp = 3;
−
}
−
</pre>
== Server ==
== Server ==
−
On a server side, CRIU creates SOCK_SEQPACKET Unix socket and listens for connections on it. After receiving criu_msg, CRIU processes it and do what is requested and sends response 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 response back.
To launch service server run:
To launch service server run:
Line 70:
Line 77:
== Client ==
== Client ==
−
Client, in its turn, must connect to service socket, send criu_msg with request in it, and wait for a criu_msg with response.
+
Client, in its turn, must connect to service socket, send criu_msg with request in it, and wait for a criu_resp with response.
You can find examples of client programs in C and Python in test/rpc/.
You can find examples of client programs in C and Python in test/rpc/.