From: "Serge E. Hallyn" <serue@us.ibm.com>
To: Dan Smith <danms@us.ibm.com>
Cc: containers@lists.osdl.org, netdev@vger.kernel.org
Subject: Re: [PATCH 3/4] Add checkpoint support for veth devices
Date: Wed, 10 Feb 2010 11:57:51 -0600 [thread overview]
Message-ID: <20100210175751.GC12251@us.ibm.com> (raw)
In-Reply-To: <1265750713-15749-4-git-send-email-danms@us.ibm.com>
Quoting Dan Smith (danms@us.ibm.com):
> Adds an ndo_checkpoint() handler for veth devices to checkpoint themselves.
> Writes out the pairing information, addresses, and initiates a checkpoint
> on the peer if the peer won't be reached from another netns. Throws an
> error of our peer's netns isn't already in the hash (i.e., a tree leak).
>
> Signed-off-by: Dan Smith <danms@us.ibm.com>
What is here looks good to me, both patches 3 and 4 (but of course i
can't ack as is :)
> ---
> drivers/net/veth.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 74 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/veth.c b/drivers/net/veth.c
> index 3a15de5..ad0f561 100644
> --- a/drivers/net/veth.c
> +++ b/drivers/net/veth.c
> @@ -16,6 +16,9 @@
> #include <net/xfrm.h>
> #include <linux/veth.h>
>
> +#include <linux/checkpoint.h>
> +#include <linux/checkpoint_hdr.h>
> +
> #define DRV_NAME "veth"
> #define DRV_VERSION "1.0"
>
> @@ -284,6 +287,74 @@ static void veth_dev_free(struct net_device *dev)
> free_netdev(dev);
> }
>
> +#ifdef CONFIG_CHECKPOINT
> +static int veth_checkpoint(struct ckpt_ctx *ctx, struct net_device *dev)
> +{
> + struct ckpt_hdr_netdev *h;
> + struct veth_priv *priv = netdev_priv(dev);
> + struct net_device *peer = priv->peer;
> + struct ckpt_netdev_addr *addrs;
> + int ret;
> + int n;
> +
> + if (!peer) {
> + ckpt_err(ctx, -EINVAL, "veth device has no peer!\n");
> + return -EINVAL;
> + }
> +
> + h = ckpt_netdev_base(ctx, dev, &addrs);
> + if (IS_ERR(h))
> + return PTR_ERR(h);
> +
> + h->type = CKPT_NETDEV_VETH;
> +
> + ret = h->this_ref = ckpt_obj_lookup_add(ctx, dev, CKPT_OBJ_NETDEV, &n);
> + if (ret < 0)
> + goto out;
> +
> + ret = h->peer_ref = ckpt_obj_lookup_add(ctx, peer, CKPT_OBJ_NETDEV, &n);
> + if (ret < 0)
> + goto out;
> +
> + ret = ckpt_write_obj(ctx, (struct ckpt_hdr *)h);
> + if (ret < 0)
> + goto out;
> +
> + ret = ckpt_write_buffer(ctx, dev->name, IFNAMSIZ);
> + if (ret < 0)
> + goto out;
> +
> + ret = ckpt_write_buffer(ctx, peer->name, IFNAMSIZ);
> + if (ret < 0)
> + goto out;
> +
> + if (h->inet_addrs > 0) {
> + int len = (sizeof(struct ckpt_netdev_addr) * h->inet_addrs);
> + ret = ckpt_write_buffer(ctx, addrs, len);
> + if (ret)
> + goto out;
> + }
> +
> + /* Only checkpoint peer if we're not going to arrive at it
> + * via another task's netns. Fail if the pipe exits
> + * our container to a netns not already in the hash
> + */
> + if (ckpt_netdev_in_init_netns(ctx, peer))
> + ret = checkpoint_obj(ctx, peer, CKPT_OBJ_NETDEV);
> + else if (!ckpt_obj_lookup(ctx, peer->nd_net, CKPT_OBJ_NET_NS)) {
> + ret = -EINVAL;
> + ckpt_err(ctx, ret,
> + "Peer %s of %s not in checkpointed namespaces\n",
> + peer->name, dev->name);
> + }
> + out:
> + ckpt_hdr_put(ctx, h);
> + kfree(addrs);
> +
> + return ret;
> +}
> +#endif
> +
> static const struct net_device_ops veth_netdev_ops = {
> .ndo_init = veth_dev_init,
> .ndo_open = veth_open,
> @@ -292,6 +363,9 @@ static const struct net_device_ops veth_netdev_ops = {
> .ndo_change_mtu = veth_change_mtu,
> .ndo_get_stats = veth_get_stats,
> .ndo_set_mac_address = eth_mac_addr,
> +#ifdef CONFIG_CHECKPOINT
> + .ndo_checkpoint = veth_checkpoint,
> +#endif
> };
>
> static void veth_setup(struct net_device *dev)
> --
> 1.6.2.5
>
> _______________________________________________
> Containers mailing list
> Containers@lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/containers
next prev parent reply other threads:[~2010-02-10 17:57 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-09 21:25 Network device and namespace checkpoint/restart (v2) Dan Smith
2010-02-09 21:25 ` [PATCH 1/4] Add checkpoint and collect hooks to net_device_ops Dan Smith
2010-02-09 21:25 ` [PATCH 2/4] C/R: Basic support for network namespaces and devices (v3) Dan Smith
[not found] ` <1265750713-15749-3-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-10 17:24 ` Serge E. Hallyn
2010-02-10 17:38 ` Dan Smith
[not found] ` <87pr4dgfdz.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2010-02-10 20:01 ` Oren Laadan
2010-02-10 20:30 ` Serge E. Hallyn
2010-02-10 17:55 ` Dan Smith
2010-02-10 19:20 ` Serge E. Hallyn
2010-02-10 19:30 ` Dan Smith
2010-02-10 20:25 ` Serge E. Hallyn
2010-02-10 20:31 ` Dan Smith
2010-02-10 20:34 ` Serge E. Hallyn
[not found] ` <87ljf1gemh.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2010-02-11 11:02 ` Louis Rilling
2010-02-11 15:59 ` Dan Smith
2010-02-11 17:20 ` Oren Laadan
2010-02-11 17:51 ` Oren Laadan
2010-02-09 21:25 ` [PATCH 3/4] Add checkpoint support for veth devices Dan Smith
2010-02-10 17:57 ` Serge E. Hallyn [this message]
2010-02-09 21:25 ` [PATCH 4/4] Add loopback checkpoint support Dan Smith
2010-02-11 17:26 ` Network device and namespace checkpoint/restart (v2) Oren Laadan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100210175751.GC12251@us.ibm.com \
--to=serue@us.ibm.com \
--cc=containers@lists.osdl.org \
--cc=danms@us.ibm.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.