Linux Container Development
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox