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

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


On 06/10/2016 06:48 PM, Pavel Tikhomirov wrote:
> 
> 
> On 06/10/2016 06:08 PM, Pavel Emelyanov wrote:
>> 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.
> 
> I think it is better to change here for all sysctls, as: 1) it will be 
> same order as in ipv6, 2) If someone makes something similar to 
> "forwarding" in kernel we will be ready 3)quirk for mtu just not 
> optimizes mtu restore, but here we will need to add second restore of 
> default forwarding...

OK, I don't mind flipping all/default restore, but keeping 2 accept_redirects
in list doesn't look great. Better quirk it in the code.

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