All of lore.kernel.org
 help / color / mirror / Atom feed
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 3/4] Add IPv6 address checkpoint handler
Date: Mon, 12 Apr 2010 11:11:48 -0500	[thread overview]
Message-ID: <20100412161148.GC23380@us.ibm.com> (raw)
In-Reply-To: <1270748932-26745-4-git-send-email-danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>

Quoting Dan Smith (danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org):
> Signed-off-by: Dan Smith <danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> ---
>  include/linux/checkpoint_hdr.h |    8 +++
>  net/ipv6/addrconf.c            |   95 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 103 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
> index 13bf62c..98aa79c 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_IPV6,
>  	CKPT_NETDEV_ADDR_MAX
>  };
> 
> @@ -816,6 +817,13 @@ struct ckpt_netdev_addr {
>  			__be32 inet4_mask;
>  			__be32 inet4_broadcast;
>  		};
> +		struct {
> +			struct in6_addr inet6_addr;
> +			__u32  inet6_prefix_len;
> +			__u32  inet6_valid_lft;
> +			__u32  inet6_prefered_lft;
> +			__u16  inet6_scope;
> +		};
>  	} __attribute__((aligned(8)));
>  } __attribute__((aligned(8)));
> 
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index 143791d..75cc3b8 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -87,6 +87,8 @@
>  #include <linux/proc_fs.h>
>  #include <linux/seq_file.h>
> 
> +#include <linux/checkpoint.h>
> +
>  /* Set to 3 to get tracing... */
>  #define ACONF_DEBUG 2
> 
> @@ -4514,6 +4516,91 @@ int unregister_inet6addr_notifier(struct notifier_block *nb)
> 
>  EXPORT_SYMBOL(unregister_inet6addr_notifier);
> 
> +#ifdef CONFIG_NETNS_CHECKPOING

How could that be defined?  :)

> +static int inet6_checkpoint(struct ckpt_ctx *ctx, struct net_device *dev,
> +			    int index, int max,
> +			    struct ckpt_netdev_addr *addrs)
> +{
> +	struct inet6_dev *indev = dev->ip6_ptr;
> +	struct inet6_ifaddr *addr;
> +	struct ifmcaddr6 *mcaddr;
> +	struct ifacaddr6 *acaddr;
> +
> +	for (addr = indev->addr_list; addr; addr = addr->if_next) {
> +		if (ipv6_addr_scope(&addr->addr))
> +			continue; /* Ignore non-global scope addresses */
> +
> +		addrs[index].type = CKPT_NETDEV_ADDR_IPV6;
> +
> +		ipv6_addr_copy(&addrs[index].inet6_addr, &addr->addr);
> +
> +		ckpt_debug("Checkpointed inet6: %pI6\n", &addr->addr);
> +
> +		addrs[index].inet6_prefix_len = addr->prefix_len;
> +		addrs[index].inet6_valid_lft = addr->valid_lft;
> +		addrs[index].inet6_prefered_lft = addr->prefered_lft;
> +		addrs[index].inet6_scope = addr->scope;
> +
> +		if (++index >= max)
> +			return -E2BIG;
> +	}
> +
> +	for (mcaddr = indev->mc_list; mcaddr; mcaddr = mcaddr->next) {
> +		if (ipv6_addr_scope(&mcaddr->mca_addr))
> +			continue; /* Ignore non-global scope addresses */
> +
> +		/* TODO */
> +
> +		/* Multicast addresses are not supported, so do not
> +		 * allow checkpoint to continue if one is assigned
> +		 */
> +		ckpt_debug("ipv6 multicast addresses are not supported\n");

Again, I'd prefer ckpt_err here.

Note that in my last email that really was a q - if you're under
spinlock here, then you can't use ckpt_err().

> +		return -EINVAL;
> +	}
> +
> +	for (acaddr = indev->ac_list; acaddr; acaddr = acaddr->aca_next) {
> +		if (ipv6_addr_scope(&acaddr->aca_addr))
> +			continue; /* Ignore non-global scope addresses */
> +
> +		/* TODO */
> +
> +		/* Anycast addresses are not supported, so do not
> +		 * allow checkpoint to continue if one is assigned
> +		 */
> +		ckpt_debug("ipv6 anycast addresses are not supported\n");

and here

> +		return -EINVAL;
> +	}
> +
> +	return index;
> +}
> +
> +static int inet6_restore(struct ckpt_ctx *ctx,
> +			 struct net_device *dev,
> +			 struct net *net,
> +			 struct ckpt_netdev_addr *addr)
> +{
> +	int ret;
> +
> +	rtnl_lock();
> +	ret = inet6_addr_add(net, dev->ifindex, &addr->inet6_addr,
> +			     addr->inet6_prefix_len, IFA_F_PERMANENT,
> +			     INFINITY_LIFE_TIME, INFINITY_LIFE_TIME);
> +	rtnl_unlock();
> +	if (ret < 0)
> +		ckpt_err(ctx, ret, "Failed to set address %pI6\n",
> +			 &addr->inet6_addr);
> +
> +	return ret;
> +}
> +
> +struct ckpt_netdev_addr_handler inet6_addr_handler = {
> +	.type =			CKPT_NETDEV_ADDR_IPV6,
> +	.owner =		THIS_MODULE,
> +	.checkpoint_addr =	inet6_checkpoint,
> +	.restore_addr =		inet6_restore,
> +};
> +#endif /* CONFIG_NETNS_CHECKPOINT */
> +
>  /*
>   *	Init / cleanup code
>   */
> @@ -4572,6 +4659,10 @@ int __init addrconf_init(void)
> 
>  	ipv6_addr_label_rtnl_register();
> 
> +#ifdef CONFIG_NETNS_CHECKPOINT
> +	ckpt_netdev_addr_register(&inet6_addr_handler);
> +#endif
> +
>  	return 0;
>  errout:
>  	unregister_netdevice_notifier(&ipv6_dev_notf);
> @@ -4590,6 +4681,10 @@ void addrconf_cleanup(void)
>  	unregister_netdevice_notifier(&ipv6_dev_notf);
>  	unregister_pernet_subsys(&addrconf_ops);
> 
> +#ifdef CONFIG_NETNS_CHECKPOINT
> +	ckpt_netdev_addr_unregister(&inet6_addr_handler);
> +#endif
> +
>  	rtnl_lock();
> 
>  	/* clean dev list */
> -- 
> 1.6.2.5

  parent reply	other threads:[~2010-04-12 16:11 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
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 [this message]
     [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=20100412161148.GC23380@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.