[CRIU] [PATCH 1/2] net/sysctl: fix ipv4 forwarding

Pavel Emelyanov xemul at virtuozzo.com
Fri Jun 10 08:08:44 PDT 2016


On 06/06/2016 12:23 PM, Pavel Tikhomirov wrote:
> Restore all/accept_redirects and default/forwarding after
> all/forwarding as the last can influence the former two.
> (see inet_forward_change in kernel)
> 
> # sysctl -w net.ipv4.conf.all.forwarding=1
> net.ipv4.conf.all.forwarding = 1
> # sysctl -w net.ipv4.conf.default.forwarding=1
> net.ipv4.conf.default.forwarding = 1
> # sysctl -w net.ipv4.conf.all.forwarding=0
> net.ipv4.conf.all.forwarding = 0
> # sysctl net.ipv4.conf.default.forwarding
> net.ipv4.conf.default.forwarding = 0
> 
> Not to break image backward/forward compatibility just append
> another copy of "accept_redirects" to lists
> 
> Trigered with netns-dev test in VZ7CT with vzlinux-6-x86_64 template
> https://jira.sw.ru/browse/PSBM-47355
> 
> Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
> ---
>  criu/net.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/criu/net.c b/criu/net.c
> index d57e0aa..4b30a35 100644
> --- a/criu/net.c
> +++ b/criu/net.c
> @@ -108,6 +108,7 @@ static char *devconfs4[] = {
>  	"ignore_routes_with_linkdown",
>  	"drop_gratuitous_arp",
>  	"drop_unicast_in_l2_multicast",
> +	"accept_redirects",
>  };
>  
>  char *devconfs6[] = {
> @@ -153,6 +154,7 @@ char *devconfs6[] = {
>  	"use_oif_addrs_only",
>  	"use_optimistic",
>  	"use_tempaddr",
> +	"accept_redirects",
>  };
>  
>  #define CONF_OPT_PATH "net/%s/conf/%s/%s"
> @@ -1327,18 +1329,18 @@ static int restore_netns_conf(int pid, NetnsEntry **netns)
>  	}
>  
>  	if ((*netns)->def_conf4) {
> -		ret = ipv4_conf_op("default", (*netns)->def_conf4, (*netns)->n_def_conf4, CTL_WRITE, NULL);
> +		ret = ipv4_conf_op("all", (*netns)->all_conf4, (*netns)->n_all_conf4, CTL_WRITE, NULL);
>  		if (ret)
>  			goto out;
> -		ret = ipv4_conf_op("all", (*netns)->all_conf4, (*netns)->n_all_conf4, CTL_WRITE, NULL);
> +		ret = ipv4_conf_op("default", (*netns)->def_conf4, (*netns)->n_def_conf4, CTL_WRITE, NULL);

But you also change the current all/default restore logic for everything.
Let's better add quirks for these sysctls as you did for mtu.

>  		if (ret)
>  			goto out;
>  	} else if ((*netns)->def_conf) {
>  		/* Backward compatibility */
> -		ret = ipv4_conf_op_old("default", (*netns)->def_conf, (*netns)->n_def_conf, CTL_WRITE, NULL);
> +		ret = ipv4_conf_op_old("all", (*netns)->all_conf, (*netns)->n_all_conf, CTL_WRITE, NULL);
>  		if (ret)
>  			goto out;
> -		ret = ipv4_conf_op_old("all", (*netns)->all_conf, (*netns)->n_all_conf, CTL_WRITE, NULL);
> +		ret = ipv4_conf_op_old("default", (*netns)->def_conf, (*netns)->n_def_conf, CTL_WRITE, NULL);
>  		if (ret)
>  			goto out;
>  	}
> 



More information about the CRIU mailing list