| Line 1: |
Line 1: |
| | == Unix sockets initial support == | | == Unix sockets initial support == |
| | | | |
| − | Currently we support Unix socket of all kinds, UDP both IPv4 and IPv6 and TCP in Listen and (!) Established states. | + | Currently we support Unix socket of all kinds, UDP both IPv4 and IPv6, TCP in Listen and (!) [[TCP connection|Established states]] and Netlink ones. |
| | | | |
| − | 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 16: |
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 ===
| |
| − | | |
| − | * socket filter (SK_ATTACH_FILTER)
| |
| − | * various (ip/tcp level) sockoptions
| |
| | | | |
| | [[Category:Under the hood]] | | [[Category:Under the hood]] |
| | + | [[Category:Sockets]] |