[CRIU] [PATCH v3 7/7] restore netns ipv4 conf all/default
Pavel Tikhomirov
ptikhomirov at parallels.com
Wed Oct 8 05:35:21 PDT 2014
On 10/08/2014 04:15 PM, Pavel Emelyanov wrote:
> On 10/08/2014 11:04 AM, Pavel Tikhomirov wrote:
>> On 10/07/2014 03:56 PM, Pavel Emelyanov wrote:
>>> On 10/01/2014 02:42 PM, Pavel Tikhomirov wrote:
>>>> restore order:
>>>> 1. default
>>>> 2. all
>>>> 3. devices
>>>>
>>>> Signed-off-by: Pavel Tikhomirov<ptikhomirov at parallels.com>
>>>> ---
>>>> net.c | 36 +++++++++++++++++++++++++++++++++++-
>>>> 1 file changed, 35 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/net.c b/net.c
>>>> index 7a80973..a164795 100644
>>>> --- a/net.c
>>>> +++ b/net.c
>>>> @@ -616,6 +616,38 @@ static inline int restore_iptables(int pid)
>>>> return ret;
>>>> }
>>>>
>>>> +static int restore_netns_conf(int pid)
>>>> +{
>>>> + int ret;
>>>> + int fd;
>>>> + NetnsEntry *netns;
>>>> +
>>>> + fd = open_image(CR_FD_NETNS, O_RSTR, pid);
>>>> + if (fd < 0) {
>>>> + pr_err("Can not open netns image\n");
>>>> + return -1;
>>>> + }
>>>> +
>>>> + ret = pb_read_one(fd, &netns, PB_NETNS);
>>>> + if (ret < 0) {
>>>> + pr_err("Can not read netns object\n");
>>>> + close(fd);
>>>> + return -1;
>>>> + }
>>>> +
>>>> + ret = ipv4_conf_op("net/ipv4/conf/default", netns->def_conf, CTL_WRITE);
>>>> + if (ret < 0)
>>>> + goto err;
>>>> + ret = ipv4_conf_op("net/ipv4/conf/all", netns->all_conf, CTL_WRITE);
>>>> +err:
>>>> + netns_entry__free_unpacked(netns, NULL);
>>>> + close(fd);
>>>> + if (ret < 0)
>>>> + return -1;
>>>> +
>>>> + return 0;
>>>> +}
>>>> +
>>>> static int mount_ns_sysfs(void)
>>>> {
>>>> char sys_mount[] = "crtools-sys.XXXXXX";
>>>> @@ -690,7 +722,9 @@ int prepare_net_ns(int pid)
>>>> {
>>>> int ret;
>>>>
>>>> - ret = restore_links(pid);
>>>> + ret = restore_netns_conf(pid);
>>>> + if (!ret)
>>>> + ret = restore_links(pid);
>>> Since we restore link confs after default and all we can make
>>> an optimisation -- don't restore the device values that match
>>> the "default" set. Please implement.
>> This is, I think, for devices except "lo", because it is created along
>> with a namespace, right?
> For lo we can skip this for now, yes.
Shall I make it as separate patch - optimization?
>>>> if (!ret)
>>>> ret = restore_ifaddr(pid);
>>>> if (!ret)
>>>>
--
Best regards, Tikhomirov Pavel
Junior Software Developer || Parallels.
More information about the CRIU
mailing list