From: "Serge E. Hallyn" <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
To: Dan Smith <danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Cc: containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org
Subject: Re: [PATCH 1/4] Modularize the handling of netdev address c/r
Date: Mon, 12 Apr 2010 11:08:14 -0500 [thread overview]
Message-ID: <20100412160814.GA23380@us.ibm.com> (raw)
In-Reply-To: <1270748932-26745-2-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Quoting Dan Smith (danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org):
> This moves the INET4 address checkpoint and restart routines into
> net/ipv4/devinet.c and introduces a registration method to present
> the checkpoint code with the handler functions.
>
> This makes it easier to add additional address types, and also
> makes the cases where inet4 is absent, inet6 is a module, etc much
> easier. It also elminates the need for a couple of helper functions.
>
> Signed-off-by: Dan Smith <danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> ---
> include/linux/checkpoint.h | 18 +++++-
> include/linux/checkpoint_hdr.h | 1 +
> net/checkpoint_dev.c | 152 ++++++++++++++++++++++++----------------
> net/ipv4/devinet.c | 75 ++++++++++++++++++++
> 4 files changed, 184 insertions(+), 62 deletions(-)
>
> diff --git a/include/linux/checkpoint.h b/include/linux/checkpoint.h
> index 96693e2..5fdbd01 100644
> --- a/include/linux/checkpoint.h
> +++ b/include/linux/checkpoint.h
> @@ -132,7 +132,8 @@ extern void *restore_netdev(struct ckpt_ctx *ctx);
>
> extern int ckpt_netdev_in_init_netns(struct ckpt_ctx *ctx,
> struct net_device *dev);
> -extern int ckpt_netdev_inet_addrs(struct in_device *indev,
> +extern int ckpt_netdev_inet_addrs(struct ckpt_ctx *ctx,
> + struct net_device *dev,
> struct ckpt_netdev_addr *list[]);
> extern int ckpt_netdev_hwaddr(struct net_device *dev,
> struct ckpt_hdr_netdev *h);
> @@ -513,6 +514,21 @@ extern void _ckpt_msg_complete(struct ckpt_ctx *ctx);
> _do_ckpt_msg(ctx, err, "[E @ %s:%d]" fmt, __func__, __LINE__, ##args); \
> } while (0)
>
> +struct ckpt_netdev_addr_handler {
> + int type;
> + struct module *owner;
> + int (*checkpoint_addr)(struct ckpt_ctx *ctx,
> + struct net_device *dev,
> + int index, int max,
> + struct ckpt_netdev_addr *addrs);
> + int (*restore_addr)(struct ckpt_ctx *ctx,
> + struct net_device *dev,
> + struct net *net,
> + struct ckpt_netdev_addr *addr);
> +};
> +extern int ckpt_netdev_addr_register(struct ckpt_netdev_addr_handler *);
> +extern int ckpt_netdev_addr_unregister(struct ckpt_netdev_addr_handler *);
> +
> #endif /* CONFIG_CHECKPOINT */
> #endif /* __KERNEL__ */
>
> diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
> index 36386ad..13bf62c 100644
> --- a/include/linux/checkpoint_hdr.h
> +++ b/include/linux/checkpoint_hdr.h
> @@ -804,6 +804,7 @@ struct ckpt_hdr_netdev {
>
> enum ckpt_netdev_addr_types {
> CKPT_NETDEV_ADDR_IPV4,
> + CKPT_NETDEV_ADDR_MAX
> };
>
> struct ckpt_netdev_addr {
> diff --git a/net/checkpoint_dev.c b/net/checkpoint_dev.c
> index 5a4a95b..4ef06e3 100644
> --- a/net/checkpoint_dev.c
> +++ b/net/checkpoint_dev.c
> @@ -12,11 +12,11 @@
> #include <linux/sched.h>
> #include <linux/if.h>
> #include <linux/if_arp.h>
> -#include <linux/inetdevice.h>
> #include <linux/veth.h>
> #include <linux/checkpoint.h>
> #include <linux/checkpoint_hdr.h>
> #include <linux/deferqueue.h>
> +#include <linux/module.h>
>
> #include <net/net_namespace.h>
> #include <net/sch_generic.h>
> @@ -34,17 +34,64 @@ struct mvl_newlink {
>
> typedef int (*new_link_fn)(struct sk_buff *, void *);
>
> -static int __kern_devinet_ioctl(struct net *net, unsigned int cmd, void *arg)
> +static struct ckpt_netdev_addr_handler *addr_handlers[CKPT_NETDEV_ADDR_MAX];
> +
> +static char *addr_modules[] = {
> + "ipv4", /* CKPT_NETDEV_ADDR_IPV4 */
> + "ipv6", /* CKPT_NETDEV_ADDR_IPV6 */
> +};
Looks good to me, thanks Dan.
Acked-by: Serge Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Just one comment:
Should ckpt_netdev_addr_types/CKPT_NETDEV_ADDR_MAX somehow be
sanity-checked against the size of array?
-serge
next prev parent reply other threads:[~2010-04-12 16:08 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-08 17:48 A modular approach to handling netdev address c/r Dan Smith
[not found] ` <1270748932-26745-1-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-04-08 17:48 ` [PATCH 1/4] Modularize the handling of " Dan Smith
[not found] ` <1270748932-26745-2-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-04-12 16:08 ` Serge E. Hallyn [this message]
2010-04-25 21:04 ` Oren Laadan
[not found] ` <4BD4AE6D.2070507-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-04-26 15:11 ` Dan Smith
[not found] ` <874oiyfdv1.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2010-04-26 16:05 ` Oren Laadan
2010-04-08 17:48 ` [PATCH 2/4] Fail checkpoint if IPv4 multicast addresses are configured Dan Smith
[not found] ` <1270748932-26745-3-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-04-12 16:09 ` Serge E. Hallyn
2010-04-08 17:48 ` [PATCH 3/4] Add IPv6 address checkpoint handler Dan Smith
[not found] ` <1270748932-26745-4-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-04-12 16:11 ` Serge E. Hallyn
[not found] ` <20100412161148.GC23380-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-04-12 17:39 ` Dan Smith
[not found] ` <871vekbmen.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2010-04-12 17:47 ` Serge E. Hallyn
2010-04-12 17:58 ` Dan Smith
[not found] ` <20100412174756.GA15269-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-04-25 20:49 ` Oren Laadan
2010-04-15 19:35 ` Brian Haley
[not found] ` <4BC76A65.7060909-VXdhtT5mjnY@public.gmane.org>
2010-04-15 19:46 ` Dan Smith
[not found] ` <87vdbs1oty.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2010-04-15 20:32 ` Brian Haley
[not found] ` <4BC777C8.6050102-VXdhtT5mjnY@public.gmane.org>
2010-04-16 15:02 ` Dan Smith
2010-04-08 17:48 ` [PATCH 4/4] C/R: Fix storing IPv6 addresses and handle the "ipv6only" socket flag (v2) Dan Smith
[not found] ` <1270748932-26745-5-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-04-25 21:08 ` Oren Laadan
[not found] ` <4BD4AF37.10504-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-04-26 13:41 ` Dan Smith
[not found] ` <87d3xmfhzx.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2010-04-26 14:35 ` Oren Laadan
[not found] ` <4BD5A49B.9030605-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
2010-04-26 14:43 ` Dan Smith
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=20100412160814.GA23380@us.ibm.com \
--to=serue-r/jw6+rmf7hqt0dzr+alfa@public.gmane.org \
--cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
--cc=danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.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.