<div dir="ltr">Thanks!<br><div class="gmail_quote"><div dir="ltr">wt., 12 cze 2018 o 00:49 Andrei Vagin &lt;<a href="mailto:avagin@virtuozzo.com">avagin@virtuozzo.com</a>&gt; napisał(a):<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Applied, thanks!<br>
<br>
On Thu, Jun 07, 2018 at 12:32:49PM +0200, Pawel Stradomski wrote:<br>
&gt; From 084e03dfb1a3069deebfb50dc3b8daf948477b9e Mon Sep 17 00:00:00 2001<br>
&gt; From: Pawel Stradomski &lt;<a href="mailto:pstradomski@google.com" target="_blank">pstradomski@google.com</a>&gt;<br>
&gt; Date: Wed, 6 Jun 2018 21:09:13 +0200<br>
&gt; Subject: [PATCH] Allow criu page-server to work over ipv6.<br>
&gt; <br>
&gt; Signed-off-by: Pawel Stradomski &lt;<a href="mailto:pstradomski@google.com" target="_blank">pstradomski@google.com</a>&gt;<br>
&gt; ---<br>
&gt;  criu/util.c | 44 ++++++++++++++++++++++++++++++--------------<br>
&gt;  1 file changed, 30 insertions(+), 14 deletions(-)<br>
&gt; <br>
&gt; diff --git a/criu/util.c b/criu/util.c<br>
&gt; index be892bbb..b46f2964 100644<br>
&gt; --- a/criu/util.c<br>
&gt; +++ b/criu/util.c<br>
&gt; @@ -1268,39 +1268,50 @@ void print_data(unsigned long addr, unsigned char *data, size_t size)<br>
&gt;       }<br>
&gt;  }<br>
&gt;  <br>
&gt; -static int get_sockaddr_in(struct sockaddr_in *addr, char *host)<br>
&gt; +static int get_sockaddr_in(struct sockaddr_storage *addr, char *host)<br>
&gt;  {<br>
&gt;       memset(addr, 0, sizeof(*addr));<br>
&gt; -     addr-&gt;sin_family = AF_INET;<br>
&gt;  <br>
&gt; -     if (!host)<br>
&gt; -             addr-&gt;sin_addr.s_addr = INADDR_ANY;<br>
&gt; -     else if (!inet_aton(host, &amp;addr-&gt;sin_addr)) {<br>
&gt; +     if (!host) {<br>
&gt; +             ((struct sockaddr_in *)addr)-&gt;sin_addr.s_addr = INADDR_ANY;<br>
&gt; +             addr-&gt;ss_family = AF_INET;<br>
&gt; +     } else if (inet_pton(AF_INET, host, &amp;((struct sockaddr_in *)addr)-&gt;sin_addr)) {<br>
&gt; +             addr-&gt;ss_family = AF_INET;<br>
&gt; +     } else if (inet_pton(AF_INET6, host, &amp;((struct sockaddr_in6 *)addr)-&gt;sin6_addr)) {<br>
&gt; +             addr-&gt;ss_family = AF_INET6;<br>
&gt; +     } else {<br>
&gt;               pr_perror(&quot;Bad server address&quot;);<br>
&gt;               return -1;<br>
&gt;       }<br>
&gt;  <br>
&gt; -     addr-&gt;sin_port = htons(opts.port);<br>
&gt; +     if (addr-&gt;ss_family == AF_INET6) {<br>
&gt; +             ((struct sockaddr_in6 *)addr)-&gt;sin6_port = htons(opts.port);<br>
&gt; +     } else if (addr-&gt;ss_family == AF_INET) {<br>
&gt; +             ((struct sockaddr_in *)addr)-&gt;sin_port = htons(opts.port);<br>
&gt; +     }<br>
&gt; +<br>
&gt;       return 0;<br>
&gt;  }<br>
&gt;  <br>
&gt;  int setup_tcp_server(char *type)<br>
&gt;  {<br>
&gt;       int sk = -1;<br>
&gt; -     struct sockaddr_in saddr;<br>
&gt; +     struct sockaddr_storage saddr;<br>
&gt;       socklen_t slen = sizeof(saddr);<br>
&gt;  <br>
&gt; +     if (get_sockaddr_in(&amp;saddr, opts.addr)) {<br>
&gt; +             return -1;<br>
&gt; +     }<br>
&gt; +<br>
&gt;       pr_info(&quot;Starting %s server on port %u\n&quot;, type, opts.port);<br>
&gt;  <br>
&gt; -     sk = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);<br>
&gt; +     sk = socket(saddr.ss_family, SOCK_STREAM, IPPROTO_TCP);<br>
&gt; +<br>
&gt;       if (sk &lt; 0) {<br>
&gt;               pr_perror(&quot;Can&#39;t init %s server&quot;, type);<br>
&gt;               return -1;<br>
&gt;       }<br>
&gt;  <br>
&gt; -     if (get_sockaddr_in(&amp;saddr, opts.addr))<br>
&gt; -             goto out;<br>
&gt; -<br>
&gt;       if (bind(sk, (struct sockaddr *)&amp;saddr, slen)) {<br>
&gt;               pr_perror(&quot;Can&#39;t bind %s server&quot;, type);<br>
&gt;               goto out;<br>
&gt; @@ -1318,7 +1329,12 @@ int setup_tcp_server(char *type)<br>
&gt;                       goto out;<br>
&gt;               }<br>
&gt;  <br>
&gt; -             opts.port = ntohs(saddr.sin_port);<br>
&gt; +             if (saddr.ss_family == AF_INET6) {<br>
&gt; +                     opts.port = ntohs(((struct sockaddr_in *)&amp;saddr)-&gt;sin_port);<br>
&gt; +             } else if (saddr.ss_family == AF_INET) {<br>
&gt; +                     opts.port = ntohs(((struct sockaddr_in6 *)&amp;saddr)-&gt;sin6_port);<br>
&gt; +             }<br>
&gt; +<br>
&gt;               pr_info(&quot;Using %u port\n&quot;, opts.port);<br>
&gt;       }<br>
&gt;  <br>
&gt; @@ -1377,7 +1393,7 @@ out:<br>
&gt;  <br>
&gt;  int setup_tcp_client(char *addr)<br>
&gt;  {<br>
&gt; -     struct sockaddr_in saddr;<br>
&gt; +     struct sockaddr_storage saddr;<br>
&gt;       int sk;<br>
&gt;  <br>
&gt;       pr_info(&quot;Connecting to server %s:%u\n&quot;, addr, opts.port);<br>
&gt; @@ -1385,7 +1401,7 @@ int setup_tcp_client(char *addr)<br>
&gt;       if (get_sockaddr_in(&amp;saddr, addr))<br>
&gt;               return -1;<br>
&gt;  <br>
&gt; -     sk = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);<br>
&gt; +     sk = socket(saddr.ss_family, SOCK_STREAM, IPPROTO_TCP);<br>
&gt;       if (sk &lt; 0) {<br>
&gt;               pr_perror(&quot;Can&#39;t create socket&quot;);<br>
&gt;               return -1;<br>
&gt; -- <br>
&gt; 2.18.0.rc1.242.g61856ae69a-goog<br>
&gt; <br>
&gt; <br>
&gt; -- <br>
&gt; Pawel Stradomski<br>
&gt; _______________________________________________<br>
&gt; CRIU mailing list<br>
&gt; <a href="mailto:CRIU@openvz.org" target="_blank">CRIU@openvz.org</a><br>
&gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" rel="noreferrer" target="_blank">https://lists.openvz.org/mailman/listinfo/criu</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">Paweł Stradomski</div></div>