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:Network]] | + | [[Category:API]] |
| + | [[Category:External]] |
| + | [[Category:Sockets]] |