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]] |