Changes

Jump to navigation Jump to search
1,618 bytes added ,  22:01, 23 June 2017
m
→‎Using the option: use template:opt
Line 1: Line 1: −
This explains the meaning of '''external socket is used''' error message, and the purpose of '''<code>--ext-unix-sk</code>''' option.
+
This explains the meaning of '''external socket is used''' error message, and the purpose of '''<code>--external unix[...]</code>''' option.
    
== Error meaning ==
 
== Error meaning ==
Line 11: Line 11:  
== Using the option ==
 
== Using the option ==
   −
However, sometimes it is possible to dump and successfully restore only one end of a unix socket pair. One particular example is the <code>logd</code>, a daemon which opens a datagram unix socket and waits on it for messages to be written into a log file. Processes using logd also create datagram unix sockets and connect those to the logd socket. These connections are thus uni-directional, meaning that the logd's socket remains unconnected. In this case it is possible to dump a program using logd as a client. For it to work after restore its socket needs to be reconnected back to logd using the logd's socket name.
+
However, sometimes it is possible to dump and successfully restore only one end of a unix socket pair. One particular example is the datagram sockets with on-way connection (client to server) used e.g. by <code>logd</code>. Server opens a datagram socket and waits on it for messages to be written into a log file. Processes using logd also create datagram sockets and connect those to the server. These connections are thus uni-directional. In this case it is possible to dump a program with the client-side socket and on restore the socket needs to be reconnected back to the original server.
   −
This is when <code>--ext-unix-sk</code> option should be used. By providing this option (for both dump and restore commands), user states "I know there may be uni-directional unix connections, and I will make sure the server end will exist on restore".
+
This is when {{Opt|--external}} option should be used. By providing this option for both dump (now) and restore (in plans) commands, user states "I know there may be uni-directional dgram unix connections, and I will make sure the server end will exist on restore".
    
For '''criu dump''', this option enables dumping ''datagram'' unix sockets with additional information about that other ("external") socket it is connected to.
 
For '''criu dump''', this option enables dumping ''datagram'' unix sockets with additional information about that other ("external") socket it is connected to.
    
For '''criu restore''', this option asks criu to re-connect such sockets back.
 
For '''criu restore''', this option asks criu to re-connect such sockets back.
 +
 +
== Limitations ==
 +
 +
Some types of sockets are hard to deal with.
 +
 +
=== stream/seqpacket ===
 +
 +
Named unix sockets with stream/seqpacket options can't be dumped/restored, as once we dump one end,
 +
the other one will see EOF on the socket and may close it.
 +
 +
The plan for this is to extend the <code>--external unix[...]</code> semantics to work like this:
 +
 +
* On dump, the <code>--external unix[id]</code> says that socket with <code>''id''</code> is OK to be disconnected
 +
* On restore, the <code>--external unix[''id'']:''path''</code> says that the socket <code>''id''</code> should be reconnected back to the path it say on dump (or to the specified <code>''path''</code>) (THIS IS IN PLANS!)
 +
 +
=== socketpair ===
 +
 +
Unnamed unix sockets created with <code>socketpair()</code> system call can be dumped and restored.
 +
 +
On dump, tell inode of this socket to CRIU, like this
 +
 +
criu dump -D images -o dump.log -v4 --external unix[11890815] -t 16528
 +
 +
On restore, the server should create a new pair and call <code>criu restore</code> asking it to [[Inheriting FDs on restore|inherit]] one.
 +
For example:
 +
 +
criu restore -d -D images -o restore.log --pidfile restore.pid -v4 -x --inherit-fd fd[3]:socket:[11890815]
 +
 +
Test is available for this feature, see test/socketpairs in criu sources.
 +
 +
== Old days ==
 +
 +
For now the same thing is specified with <code>-x|--ext-unix-sk</code> option. Note, that the <code>id</code> argument was optional and made CRIU treat as external any unconnected socket. Soon this option will be [[deprecation|deprecated]].
    
== See also ==
 
== See also ==
    
* [[Advanced usage]]
 
* [[Advanced usage]]
 +
* [[Inheriting FDs on restore]]
    
[[Category:HOWTO]]
 
[[Category:HOWTO]]
 +
[[Category:API]]
 +
[[Category:External]]
 +
[[Category:Sockets]]

Navigation menu