Hi, all

Some expect the new net namespace inherits from the original net config. Some expect the new net namespace inherits from the current net config, including the modified net configurations.

To meet the different reqirements, this patch is made.

I think maybe mainline should need this patch.

Please comment on this patch.

Any reply is appreciated.

Thanks a lot.
Zhu Yanjun
On 06/26/2015 05:37 PM, Zhu Yanjun wrote:
The new net namespace can inherit from the original net config, or
the current net config. As such, a config is needed to decide where
the new namespace inherit from.

Signed-off-by: Zhu Yanjun <yanjun....@windriver.com>
---
  init/Kconfig       |  9 +++++++++
  net/ipv4/devinet.c | 13 +++++++++++++
  2 files changed, 22 insertions(+)

diff --git a/init/Kconfig b/init/Kconfig
index dc24dec..fab8c41 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1212,6 +1212,15 @@ config NET_NS
          Allow user space to create what appear to be multiple instances
          of the network stack.
+config NET_NS_INHERIT_ORIGINAL
+       bool "New network namespace inherits from original net config"
+       depends on NET_NS
+       default n
+       help
+         Allow new network namespace inherit from original net config.
+         If no, the new network namespace inherits from the current net
+         config including the modified net config.
+
  endif # NAMESPACES
config SCHED_AUTOGROUP
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index 419d23c..cf635e4 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -2271,6 +2271,7 @@ static __net_init int devinet_init_net(struct net *net)
  #endif
err = -ENOMEM;
+#ifndef CONFIG_NET_NS_INHERIT_ORIGINAL
        all = &ipv4_devconf;
        dflt = &ipv4_devconf_dflt;
@@ -2282,6 +2283,15 @@ static __net_init int devinet_init_net(struct net *net)
                dflt = kmemdup(dflt, sizeof(ipv4_devconf_dflt), GFP_KERNEL);
                if (!dflt)
                        goto err_alloc_dflt;
+#else
+       all = kmemdup(&ipv4_devconf, sizeof(ipv4_devconf), GFP_KERNEL);
+       if (!all)
+               goto err_alloc_all;
+
+       dflt = kmemdup(&ipv4_devconf_dflt, sizeof(ipv4_devconf_dflt), 
GFP_KERNEL);
+       if (!dflt)
+               goto err_alloc_dflt;
+#endif
#ifdef CONFIG_SYSCTL
                tbl = kmemdup(tbl, sizeof(ctl_forward_entry), GFP_KERNEL);
@@ -2292,7 +2302,10 @@ static __net_init int devinet_init_net(struct net *net)
                tbl[0].extra1 = all;
                tbl[0].extra2 = net;
  #endif
+
+#ifndef CONFIG_NET_NS_INHERIT_ORIGINAL
        }
+#endif
#ifdef CONFIG_SYSCTL
        err = __devinet_sysctl_register(net, "all", all);

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to