On Tue, Sep 22, 2015 at 02:38:45PM +0200, Stanislav Kinsburskiy wrote:
> 
> 
> 22.09.2015 13:28, Andrew Vagin пишет:
> >On Tue, Sep 22, 2015 at 01:20:11PM +0200, Stanislav Kinsburskiy wrote:
> >>
> >>22.09.2015 13:15, Andrew Vagin пишет:
> >>>On Tue, Sep 22, 2015 at 11:40:03AM +0200, Stanislav Kinsburskiy wrote:
> >>>>22.09.2015 11:36, Andrew Vagin пишет:
> >>>>>On Mon, Sep 21, 2015 at 07:44:31PM +0400, Stanislav Kinsburskiy wrote:
> >>>>>>From: Stanislav Kinsburskiy <skinsbur...@parallels.com>
> >>>>>>
> >>>>>>This functions are mostly duplicating existent code in per-net hooks, 
> >>>>>>except
> >>>>>>some initialization and locking, which are performed in rtnetlink layer.
> >>>>>>
> >>>>>>https://jira.sw.ru/browse/PSBM-23441
> >>>>>>
> >>>>>>Signed-off-by: Stanislav Kinsburskiy <skinsbur...@parallels.com>
> >>>>>>---
> >>>>>>  drivers/net/venetdev.c |   49 
> >>>>>> ++++++++++++++++++++++++++++++++++++++++++++++++
> >>>>>>  1 file changed, 49 insertions(+)
> >>>>>>
> >>>>>>diff --git a/drivers/net/venetdev.c b/drivers/net/venetdev.c
> >>>>>>index 50b3c91..261be76 100644
> >>>>>>--- a/drivers/net/venetdev.c
> >>>>>>+++ b/drivers/net/venetdev.c
> >>>>>>@@ -749,6 +749,53 @@ static void venet_setup(struct net_device *dev)
> >>>>>>        SET_ETHTOOL_OPS(dev, &venet_ethtool_ops);
> >>>>>>  }
> >>>>>>+static void venet_dellink(struct net_device *dev, struct list_head 
> >>>>>>*head)
> >>>>>>+{
> >>>>>>+       struct ve_struct *env = dev->nd_net->owner_ve;
> >>>>>>+
> >>>>>>+       venet_ext_clean(env);
> >>>>>>+       veip_stop(env);
> >>>>>>+
> >>>>>>+       env->_venet_dev = NULL;
> >>>>>>+       unregister_netdevice_queue(dev, head);
> >>>>>>+}
> >>>>>>+
> >>>>>>+static int venet_newlink(struct net *src_net, struct net_device *dev,
> >>>>>>+                 struct nlattr *tb[], struct nlattr *data[])
> >>>>>>+{
> >>>>>>+       struct ve_struct *env = src_net->owner_ve;
> >>>>>>+       int err;
> >>>>>>+
> >>>>>>+       if (env->ve_netns && src_net != env->ve_netns) {
> >>>>>>+               /* Don't create venet-s in sub net namespaces */
> >>>>>>+               return 0;
> >>>Are you sure that we can return 0 here? Looks like EEXIST.
> >>
> >>It's a former logic, so I preserved it.
> >>Introduced by Andrew Vagin here:
> >>4504338aaf4c7deb2285fc192ddfebf711f10129
> >I don't return 0 from venet_newlink...
> 
> Makes sense. Should I return -ENOTSUPP?

ENOTSUPP maybe even better that EEXIST

> 
> >
> >>>>>>+       }
> >>>>>>+
> >>>>>>+       if (env->veip)
> >>>>>Where is env->veip set to NULL, when venet is removed?
> >>>>>
> >>>>This is missing, thanks. I'll add.
> >>>>
> >>>>>>+               return -EEXIST;
> >>>>>>+
> >>>>>>+       env->ve_netns = src_net;
> >>>>>Why do we set ve_netns here?
> >>>>To prevent venet creation in nested network namespaces within containers.
> >>>>
> >>>>>>+
> >>>>>>+       err = veip_start(env);
> >>>>>>+       if (err)
> >>>>>>+               goto err;
> >>>>>>+
> >>>>>>+       dev->features |= NETIF_F_NETNS_LOCAL;
> >>>>>>+
> >>>>>>+       err = register_netdevice(dev);
> >>>>>>+       if (err)
> >>>>>>+               goto err_stop;
> >>>>>>+
> >>>>>>+       env->_venet_dev = dev;
> >>>>>>+       return 0;
> >>>>>>+
> >>>>>>+err_stop:
> >>>>>>+       veip_stop(env);
> >>>>>>+err:
> >>>>>>+       env->ve_netns = NULL;
> >>>>>>+       return err;
> >>>>>>+}
> >>>>>>+
> >>>>>>  #ifdef CONFIG_PROC_FS
> >>>>>>  static void veaddr_seq_print(struct seq_file *m, struct ve_struct *ve)
> >>>>>>  {
> >>>>>>@@ -1207,6 +1254,8 @@ static const struct nla_policy 
> >>>>>>venet_policy[VENET_INFO_MAX + 1] = {
> >>>>>>  static struct rtnl_link_ops venet_link_ops = {
> >>>>>>        .kind           = "venet",
> >>>>>>        .priv_size      = sizeof(struct veip_struct),
> >>>>>>+       .newlink        = venet_newlink,
> >>>>>>+       .dellink        = venet_dellink,
> >>>>>>        .setup          = venet_setup,
> >>>>>>        .changelink     = venet_changelink,
> >>>>>>        .policy         = venet_policy,
> >>>>>>
> >>>>>>_______________________________________________
> >>>>>>Devel mailing list
> >>>>>>Devel@openvz.org
> >>>>>>https://lists.openvz.org/mailman/listinfo/devel
> 
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to