<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Nov 13, 2019, 11:04 PM Kirill Gorkunov &lt;<a href="mailto:gorcunov@virtuozzo.com" rel="noreferrer noreferrer" target="_blank">gorcunov@virtuozzo.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Wed, Nov 13, 2019 at 08:29:15PM -0800, Andrei Vagin (C) wrote:<br>
&gt; On Wed, Nov 13, 2019 at 02:14:06PM +0000, Alexander Mikhalitsyn wrote:<br>
&gt; &gt; On Wed, 13 Nov 2019 00:45:20 -0800<br>
&gt; &gt; Andrei Vagin &lt;<a href="mailto:avagin@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">avagin@gmail.com</a>&gt; wrote:<br>
&gt; &gt; <br>
&gt; &gt; &gt; On Tue, Nov 12, 2019 at 07:06:42PM +0300, Alexander Mikhalitsyn wrote:<br>
&gt; &gt; &gt; &gt; From: Pavel Tikhomirov &lt;<a href="mailto:ptikhomirov@virtuozzo.com" rel="noreferrer noreferrer noreferrer" target="_blank">ptikhomirov@virtuozzo.com</a>&gt;<br>
&gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt; &gt; After Centos-8 nft used instead of iptables. But we had never supported nft rules in<br>
&gt; &gt; &gt; &gt; CRIU, and after c/r all rules are flushed.<br>
&gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt; &gt; Path to nft tool can be changed via CR_NFTABLES environment variable<br>
&gt; &gt; &gt; &gt; similar to CR_IPTABLES.<br>
&gt; &gt; &gt; <br>
&gt; &gt; &gt; <br>
&gt; &gt; &gt; Can we use libnftnl? This should be faster, because we will not need to<br>
&gt; &gt; &gt; fork a new process and exec a binary.<br>
&gt; &gt; &gt; <br>
&gt; <br>
&gt; &gt; Good point, but we have some problems with that. Currently, when we do<br>
&gt; &gt; &quot;nft list ruleset&quot; it output have special format (that corresponds to<br>
&gt; &gt; formal grammar defined by (nftables/src/parser_bison.y)). It&#39;s not<br>
&gt; &gt; format that supported by libnftnl. Currently libnftnl supports only<br>
&gt; &gt; dumping ruleset in &quot;command format&quot; as a sequence of nft commands that<br>
&gt; &gt; describes current ruleset. But if we try to use this format on<br>
&gt; &gt; Checkpoint in CRIU, then we have a problems on Restore - we need to<br>
&gt; &gt; execute a lot (maybe) &quot;nft ...&quot; commands. In performance terms it may<br>
&gt; &gt; be even worse then as we doing now. Of course, we can grab this parser<br>
&gt; &gt; from nftables to CRIU, but it&#39;s a lot of code and then we need<br>
&gt; &gt; additional compile-time deps - Bison for example. I don&#39;t know what to<br>
&gt; &gt; choose... :)<br>
&gt; <br>
&gt; Maybe we can use this way:<br>
&gt; <br>
&gt; on dump:<br>
&gt;   * create a netlink socket<br>
&gt;   * send a request to list all rules<br>
&gt;   * save raw netlink messages in an image file.<br>
&gt; <br>
&gt; on restore:<br>
&gt;   * create a netlink socket<br>
&gt;   * send netlink messages from the image file into the socket.<br>
&gt; <br>
&gt; &quot;ip addr save&quot; and &quot;ip addr restore&quot; work this way.<br>
&gt; <a href="https://github.com/shemminger/iproute2/blob/master/ip/ipaddress.c#L1552" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">https://github.com/shemminger/iproute2/blob/master/ip/ipaddress.c#L1552</a><br>
&gt; <a href="https://github.com/shemminger/iproute2/blob/master/ip/ipaddress.c#L1618" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">https://github.com/shemminger/iproute2/blob/master/ip/ipaddress.c#L1618</a><br>
<br>
Which implies to move in part of netlink protocol into criu.<br>
Personally I don&#39;t mind but to me this looks a bit complex.<br>
I would rather stick with not that fast but more reliable<br>
usage of exec&#39;ing CR_NFTABLES and the we could try to<br>
implement builtin (netlink based) data fetch from<br>
the kernel.<br></blockquote></div></div><div dir="auto"><br><span style="font-family:sans-serif">I believe we already have all required parts of netlink in the criu code base. And our experience with the iptable tool showed that tools are not always reliable. I think it&#39;s worth to try to implement this and see how it will looks like. I think it should not take more than an hour or two.</span><br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>