Line 215:
Line 215:
* Skill level: beginner
* Skill level: beginner
* Language: Python
* Language: Python
+
+
=== Add support for checkpoint/restore of CORK-ed UDP socket ===
+
+
'''Summary:''' Support C/R of corked UDP socket
+
+
There's UDP_CORK option for sockets. As man page says:
+
<pre>
+
If this option is enabled, then all data output on this socket
+
is accumulated into a single datagram that is transmitted when
+
the option is disabled. This option should not be used in
+
code intended to be portable.
+
</pre>
+
+
Currently criu refuses to dump this case, so it's effectively a bug. Supporting
+
this will need extending the kernel API to allow criu read back the write queue
+
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then
+
the queue is written into the image and is restored into the socket (with the CORK
+
bit set too).
+
+
'''Links:'''
+
* https://github.com/checkpoint-restore/criu/issues/409
+
* https://github.com/criupatchwork/criu/commit/a532312
+
* [[Sockets]], [[TCP connection]]
+
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]
+
+
'''Details:'''
+
* Skill level: intermediate (+linux kernel)
+
* Language: C
+
* Expected size: 350 hours
+
* Mentors: Alexander Mikhalitsyn <alexander@mihalicyn.com>, Pavel Tikhomirov <ptikhomirov@virtuozzo.com>, Andrei Vagin <avagin@gmail.com>