Changes

547 bytes removed ,  10:16, 21 September 2016
m
no edit summary
Line 1: Line 1:  
== Unix sockets initial support ==
 
== Unix sockets initial support ==
   −
Currently it can only work with stream and dgram sockets, which have no skbs in queues
+
Currently we support Unix socket of all kinds, UDP both IPv4 and IPv6, TCP in Listen and (!) [[TCP connection|Established states]] and Netlink ones.
−
(listening or established -- both work OK). If there are skbs in queue the dumping
  −
procedure will fail.
     −
The cpt part uses the sock_diag engine that was merged to Dave recently to
+
The cpt part uses the sock_diag engine to collect extended information about socket, then CRIU uses the files dumping engine to get access to sockets state.
−
collect sockets. Then it dumps sockets by checking the filesystem ID of a
  −
failed-to-open through /proc/pid/fd descriptors (sockets do not allow for
  −
such tricks with opens through proc) against SOCKFS_TYPE.
     −
The restore part is more tricky. Listen sockets are just restored, this is simple.
+
The restore part of Unix sockets is the most tricky part. Listen sockets are just restored, this is simple.
 
Connected sockets are restored like this:
 
Connected sockets are restored like this:
   Line 18: Line 13:  
# ... all listening sockets call accept() and ... dup2 the new fd into the accepting end.
 
# ... all listening sockets call accept() and ... dup2 the new fd into the accepting end.
   −
There's a problem with this approach -- socket names are not preserved, but
+
There's a problem with this approach -- socket names are not preserved, but looking into our OpenVZ implementation I think this is OK for existing apps.
−
looking into our OpenVZ implementation I think this is OK for existing apps.
     −
=== What should be done next ===
+
[[Category:Under the hood]]
−
 
+
[[Category:Sockets]]
−
* Need to merge the file IDs patches in our tree and make Andrey to support files sharing. This will solve the
  −
 
  −
<code>
  −
sk = socket();
  −
fork();
  −
</code>
  −
 
  −
case. Currently it simply doesn't work :(
  −
* Need to add support for in-flight connections
  −
* Implement support for UDP sockets (quite simple)
  −
* Implement support for listening TCP sockets (also not very complex)
  −
* Implement support for connected TCP scokets (hard one)