mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ipv6: Remove privacy config option.
The code for privacy extentions is very mature, and making it configurable only gives marginal memory/code savings in exchange for obfuscation and hard to read code via CPP ifdef'ery. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									d5d45d4294
								
							
						
					
					
						commit
						5d9efa7ee9
					
				
					 4 changed files with 4 additions and 62 deletions
				
			
		| 
						 | 
					@ -21,13 +21,11 @@ struct ipv6_devconf {
 | 
				
			||||||
	__s32		force_mld_version;
 | 
						__s32		force_mld_version;
 | 
				
			||||||
	__s32		mldv1_unsolicited_report_interval;
 | 
						__s32		mldv1_unsolicited_report_interval;
 | 
				
			||||||
	__s32		mldv2_unsolicited_report_interval;
 | 
						__s32		mldv2_unsolicited_report_interval;
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	__s32		use_tempaddr;
 | 
						__s32		use_tempaddr;
 | 
				
			||||||
	__s32		temp_valid_lft;
 | 
						__s32		temp_valid_lft;
 | 
				
			||||||
	__s32		temp_prefered_lft;
 | 
						__s32		temp_prefered_lft;
 | 
				
			||||||
	__s32		regen_max_retry;
 | 
						__s32		regen_max_retry;
 | 
				
			||||||
	__s32		max_desync_factor;
 | 
						__s32		max_desync_factor;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	__s32		max_addresses;
 | 
						__s32		max_addresses;
 | 
				
			||||||
	__s32		accept_ra_defrtr;
 | 
						__s32		accept_ra_defrtr;
 | 
				
			||||||
	__s32		accept_ra_pinfo;
 | 
						__s32		accept_ra_pinfo;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,11 +66,10 @@ struct inet6_ifaddr {
 | 
				
			||||||
	struct hlist_node	addr_lst;
 | 
						struct hlist_node	addr_lst;
 | 
				
			||||||
	struct list_head	if_list;
 | 
						struct list_head	if_list;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	struct list_head	tmp_list;
 | 
						struct list_head	tmp_list;
 | 
				
			||||||
	struct inet6_ifaddr	*ifpub;
 | 
						struct inet6_ifaddr	*ifpub;
 | 
				
			||||||
	int			regen_count;
 | 
						int			regen_count;
 | 
				
			||||||
#endif
 | 
					
 | 
				
			||||||
	bool			tokenized;
 | 
						bool			tokenized;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct rcu_head		rcu;
 | 
						struct rcu_head		rcu;
 | 
				
			||||||
| 
						 | 
					@ -192,11 +191,9 @@ struct inet6_dev {
 | 
				
			||||||
	__u32			if_flags;
 | 
						__u32			if_flags;
 | 
				
			||||||
	int			dead;
 | 
						int			dead;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	u8			rndid[8];
 | 
						u8			rndid[8];
 | 
				
			||||||
	struct timer_list	regen_timer;
 | 
						struct timer_list	regen_timer;
 | 
				
			||||||
	struct list_head	tempaddr_list;
 | 
						struct list_head	tempaddr_list;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct in6_addr		token;
 | 
						struct in6_addr		token;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,24 +21,6 @@ menuconfig IPV6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if IPV6
 | 
					if IPV6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config IPV6_PRIVACY
 | 
					 | 
				
			||||||
	bool "IPv6: Privacy Extensions (RFC 3041) support"
 | 
					 | 
				
			||||||
	---help---
 | 
					 | 
				
			||||||
	  Privacy Extensions for Stateless Address Autoconfiguration in IPv6
 | 
					 | 
				
			||||||
	  support.  With this option, additional periodically-altered
 | 
					 | 
				
			||||||
	  pseudo-random global-scope unicast address(es) will be assigned to
 | 
					 | 
				
			||||||
	  your interface(s).
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	  We use our standard pseudo-random algorithm to generate the
 | 
					 | 
				
			||||||
          randomized interface identifier, instead of one described in RFC 3041.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	  By default the kernel does not generate temporary addresses.
 | 
					 | 
				
			||||||
	  To use temporary addresses, do
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	        echo 2 >/proc/sys/net/ipv6/conf/all/use_tempaddr 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	  See <file:Documentation/networking/ip-sysctl.txt> for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config IPV6_ROUTER_PREF
 | 
					config IPV6_ROUTER_PREF
 | 
				
			||||||
	bool "IPv6: Router Preference (RFC 4191) support"
 | 
						bool "IPv6: Router Preference (RFC 4191) support"
 | 
				
			||||||
	---help---
 | 
						---help---
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -83,11 +83,7 @@
 | 
				
			||||||
#include <linux/if_tunnel.h>
 | 
					#include <linux/if_tunnel.h>
 | 
				
			||||||
#include <linux/rtnetlink.h>
 | 
					#include <linux/rtnetlink.h>
 | 
				
			||||||
#include <linux/netconf.h>
 | 
					#include <linux/netconf.h>
 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
#include <linux/random.h>
 | 
					#include <linux/random.h>
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <linux/uaccess.h>
 | 
					#include <linux/uaccess.h>
 | 
				
			||||||
#include <asm/unaligned.h>
 | 
					#include <asm/unaligned.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -124,11 +120,9 @@ static inline void addrconf_sysctl_unregister(struct inet6_dev *idev)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
static void __ipv6_regen_rndid(struct inet6_dev *idev);
 | 
					static void __ipv6_regen_rndid(struct inet6_dev *idev);
 | 
				
			||||||
static void __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr);
 | 
					static void __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr);
 | 
				
			||||||
static void ipv6_regen_rndid(unsigned long data);
 | 
					static void ipv6_regen_rndid(unsigned long data);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int ipv6_generate_eui64(u8 *eui, struct net_device *dev);
 | 
					static int ipv6_generate_eui64(u8 *eui, struct net_device *dev);
 | 
				
			||||||
static int ipv6_count_addresses(struct inet6_dev *idev);
 | 
					static int ipv6_count_addresses(struct inet6_dev *idev);
 | 
				
			||||||
| 
						 | 
					@ -183,13 +177,11 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
 | 
				
			||||||
	.rtr_solicits		= MAX_RTR_SOLICITATIONS,
 | 
						.rtr_solicits		= MAX_RTR_SOLICITATIONS,
 | 
				
			||||||
	.rtr_solicit_interval	= RTR_SOLICITATION_INTERVAL,
 | 
						.rtr_solicit_interval	= RTR_SOLICITATION_INTERVAL,
 | 
				
			||||||
	.rtr_solicit_delay	= MAX_RTR_SOLICITATION_DELAY,
 | 
						.rtr_solicit_delay	= MAX_RTR_SOLICITATION_DELAY,
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	.use_tempaddr 		= 0,
 | 
						.use_tempaddr 		= 0,
 | 
				
			||||||
	.temp_valid_lft		= TEMP_VALID_LIFETIME,
 | 
						.temp_valid_lft		= TEMP_VALID_LIFETIME,
 | 
				
			||||||
	.temp_prefered_lft	= TEMP_PREFERRED_LIFETIME,
 | 
						.temp_prefered_lft	= TEMP_PREFERRED_LIFETIME,
 | 
				
			||||||
	.regen_max_retry	= REGEN_MAX_RETRY,
 | 
						.regen_max_retry	= REGEN_MAX_RETRY,
 | 
				
			||||||
	.max_desync_factor	= MAX_DESYNC_FACTOR,
 | 
						.max_desync_factor	= MAX_DESYNC_FACTOR,
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	.max_addresses		= IPV6_MAX_ADDRESSES,
 | 
						.max_addresses		= IPV6_MAX_ADDRESSES,
 | 
				
			||||||
	.accept_ra_defrtr	= 1,
 | 
						.accept_ra_defrtr	= 1,
 | 
				
			||||||
	.accept_ra_pinfo	= 1,
 | 
						.accept_ra_pinfo	= 1,
 | 
				
			||||||
| 
						 | 
					@ -221,13 +213,11 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
 | 
				
			||||||
	.rtr_solicits		= MAX_RTR_SOLICITATIONS,
 | 
						.rtr_solicits		= MAX_RTR_SOLICITATIONS,
 | 
				
			||||||
	.rtr_solicit_interval	= RTR_SOLICITATION_INTERVAL,
 | 
						.rtr_solicit_interval	= RTR_SOLICITATION_INTERVAL,
 | 
				
			||||||
	.rtr_solicit_delay	= MAX_RTR_SOLICITATION_DELAY,
 | 
						.rtr_solicit_delay	= MAX_RTR_SOLICITATION_DELAY,
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	.use_tempaddr		= 0,
 | 
						.use_tempaddr		= 0,
 | 
				
			||||||
	.temp_valid_lft		= TEMP_VALID_LIFETIME,
 | 
						.temp_valid_lft		= TEMP_VALID_LIFETIME,
 | 
				
			||||||
	.temp_prefered_lft	= TEMP_PREFERRED_LIFETIME,
 | 
						.temp_prefered_lft	= TEMP_PREFERRED_LIFETIME,
 | 
				
			||||||
	.regen_max_retry	= REGEN_MAX_RETRY,
 | 
						.regen_max_retry	= REGEN_MAX_RETRY,
 | 
				
			||||||
	.max_desync_factor	= MAX_DESYNC_FACTOR,
 | 
						.max_desync_factor	= MAX_DESYNC_FACTOR,
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	.max_addresses		= IPV6_MAX_ADDRESSES,
 | 
						.max_addresses		= IPV6_MAX_ADDRESSES,
 | 
				
			||||||
	.accept_ra_defrtr	= 1,
 | 
						.accept_ra_defrtr	= 1,
 | 
				
			||||||
	.accept_ra_pinfo	= 1,
 | 
						.accept_ra_pinfo	= 1,
 | 
				
			||||||
| 
						 | 
					@ -371,7 +361,6 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	INIT_LIST_HEAD(&ndev->tempaddr_list);
 | 
						INIT_LIST_HEAD(&ndev->tempaddr_list);
 | 
				
			||||||
	setup_timer(&ndev->regen_timer, ipv6_regen_rndid, (unsigned long)ndev);
 | 
						setup_timer(&ndev->regen_timer, ipv6_regen_rndid, (unsigned long)ndev);
 | 
				
			||||||
	if ((dev->flags&IFF_LOOPBACK) ||
 | 
						if ((dev->flags&IFF_LOOPBACK) ||
 | 
				
			||||||
| 
						 | 
					@ -384,7 +373,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
 | 
				
			||||||
		in6_dev_hold(ndev);
 | 
							in6_dev_hold(ndev);
 | 
				
			||||||
		ipv6_regen_rndid((unsigned long) ndev);
 | 
							ipv6_regen_rndid((unsigned long) ndev);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					
 | 
				
			||||||
	ndev->token = in6addr_any;
 | 
						ndev->token = in6addr_any;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (netif_running(dev) && addrconf_qdisc_ok(dev))
 | 
						if (netif_running(dev) && addrconf_qdisc_ok(dev))
 | 
				
			||||||
| 
						 | 
					@ -865,12 +854,10 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
 | 
				
			||||||
	/* Add to inet6_dev unicast addr list. */
 | 
						/* Add to inet6_dev unicast addr list. */
 | 
				
			||||||
	ipv6_link_dev_addr(idev, ifa);
 | 
						ipv6_link_dev_addr(idev, ifa);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	if (ifa->flags&IFA_F_TEMPORARY) {
 | 
						if (ifa->flags&IFA_F_TEMPORARY) {
 | 
				
			||||||
		list_add(&ifa->tmp_list, &idev->tempaddr_list);
 | 
							list_add(&ifa->tmp_list, &idev->tempaddr_list);
 | 
				
			||||||
		in6_ifa_hold(ifa);
 | 
							in6_ifa_hold(ifa);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	in6_ifa_hold(ifa);
 | 
						in6_ifa_hold(ifa);
 | 
				
			||||||
	write_unlock(&idev->lock);
 | 
						write_unlock(&idev->lock);
 | 
				
			||||||
| 
						 | 
					@ -913,7 +900,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
 | 
				
			||||||
	spin_unlock_bh(&addrconf_hash_lock);
 | 
						spin_unlock_bh(&addrconf_hash_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	write_lock_bh(&idev->lock);
 | 
						write_lock_bh(&idev->lock);
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					
 | 
				
			||||||
	if (ifp->flags&IFA_F_TEMPORARY) {
 | 
						if (ifp->flags&IFA_F_TEMPORARY) {
 | 
				
			||||||
		list_del(&ifp->tmp_list);
 | 
							list_del(&ifp->tmp_list);
 | 
				
			||||||
		if (ifp->ifpub) {
 | 
							if (ifp->ifpub) {
 | 
				
			||||||
| 
						 | 
					@ -922,7 +909,6 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		__in6_ifa_put(ifp);
 | 
							__in6_ifa_put(ifp);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	list_for_each_entry_safe(ifa, ifn, &idev->addr_list, if_list) {
 | 
						list_for_each_entry_safe(ifa, ifn, &idev->addr_list, if_list) {
 | 
				
			||||||
		if (ifa == ifp) {
 | 
							if (ifa == ifp) {
 | 
				
			||||||
| 
						 | 
					@ -1013,7 +999,6 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
 | 
				
			||||||
	in6_ifa_put(ifp);
 | 
						in6_ifa_put(ifp);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *ift)
 | 
					static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *ift)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct inet6_dev *idev = ifp->idev;
 | 
						struct inet6_dev *idev = ifp->idev;
 | 
				
			||||||
| 
						 | 
					@ -1116,7 +1101,6 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 *	Choose an appropriate source address (RFC3484)
 | 
					 *	Choose an appropriate source address (RFC3484)
 | 
				
			||||||
| 
						 | 
					@ -1131,9 +1115,7 @@ enum {
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	IPV6_SADDR_RULE_OIF,
 | 
						IPV6_SADDR_RULE_OIF,
 | 
				
			||||||
	IPV6_SADDR_RULE_LABEL,
 | 
						IPV6_SADDR_RULE_LABEL,
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	IPV6_SADDR_RULE_PRIVACY,
 | 
						IPV6_SADDR_RULE_PRIVACY,
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	IPV6_SADDR_RULE_ORCHID,
 | 
						IPV6_SADDR_RULE_ORCHID,
 | 
				
			||||||
	IPV6_SADDR_RULE_PREFIX,
 | 
						IPV6_SADDR_RULE_PREFIX,
 | 
				
			||||||
	IPV6_SADDR_RULE_MAX
 | 
						IPV6_SADDR_RULE_MAX
 | 
				
			||||||
| 
						 | 
					@ -1247,7 +1229,6 @@ static int ipv6_get_saddr_eval(struct net *net,
 | 
				
			||||||
				      &score->ifa->addr, score->addr_type,
 | 
									      &score->ifa->addr, score->addr_type,
 | 
				
			||||||
				      score->ifa->idev->dev->ifindex) == dst->label;
 | 
									      score->ifa->idev->dev->ifindex) == dst->label;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	case IPV6_SADDR_RULE_PRIVACY:
 | 
						case IPV6_SADDR_RULE_PRIVACY:
 | 
				
			||||||
	    {
 | 
						    {
 | 
				
			||||||
		/* Rule 7: Prefer public address
 | 
							/* Rule 7: Prefer public address
 | 
				
			||||||
| 
						 | 
					@ -1259,7 +1240,6 @@ static int ipv6_get_saddr_eval(struct net *net,
 | 
				
			||||||
		ret = (!(score->ifa->flags & IFA_F_TEMPORARY)) ^ preftmp;
 | 
							ret = (!(score->ifa->flags & IFA_F_TEMPORARY)) ^ preftmp;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	case IPV6_SADDR_RULE_ORCHID:
 | 
						case IPV6_SADDR_RULE_ORCHID:
 | 
				
			||||||
		/* Rule 8-: Prefer ORCHID vs ORCHID or
 | 
							/* Rule 8-: Prefer ORCHID vs ORCHID or
 | 
				
			||||||
		 *	    non-ORCHID vs non-ORCHID
 | 
							 *	    non-ORCHID vs non-ORCHID
 | 
				
			||||||
| 
						 | 
					@ -1588,7 +1568,6 @@ static void addrconf_dad_stop(struct inet6_ifaddr *ifp, int dad_failed)
 | 
				
			||||||
		if (dad_failed)
 | 
							if (dad_failed)
 | 
				
			||||||
			ipv6_ifa_notify(0, ifp);
 | 
								ipv6_ifa_notify(0, ifp);
 | 
				
			||||||
		in6_ifa_put(ifp);
 | 
							in6_ifa_put(ifp);
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	} else if (ifp->flags&IFA_F_TEMPORARY) {
 | 
						} else if (ifp->flags&IFA_F_TEMPORARY) {
 | 
				
			||||||
		struct inet6_ifaddr *ifpub;
 | 
							struct inet6_ifaddr *ifpub;
 | 
				
			||||||
		spin_lock_bh(&ifp->lock);
 | 
							spin_lock_bh(&ifp->lock);
 | 
				
			||||||
| 
						 | 
					@ -1602,7 +1581,6 @@ static void addrconf_dad_stop(struct inet6_ifaddr *ifp, int dad_failed)
 | 
				
			||||||
			spin_unlock_bh(&ifp->lock);
 | 
								spin_unlock_bh(&ifp->lock);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ipv6_del_addr(ifp);
 | 
							ipv6_del_addr(ifp);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		ipv6_del_addr(ifp);
 | 
							ipv6_del_addr(ifp);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1851,7 +1829,6 @@ static int ipv6_inherit_eui64(u8 *eui, struct inet6_dev *idev)
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
/* (re)generation of randomized interface identifier (RFC 3041 3.2, 3.5) */
 | 
					/* (re)generation of randomized interface identifier (RFC 3041 3.2, 3.5) */
 | 
				
			||||||
static void __ipv6_regen_rndid(struct inet6_dev *idev)
 | 
					static void __ipv6_regen_rndid(struct inet6_dev *idev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -1919,7 +1896,6 @@ static void  __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmp
 | 
				
			||||||
	if (tmpaddr && memcmp(idev->rndid, &tmpaddr->s6_addr[8], 8) == 0)
 | 
						if (tmpaddr && memcmp(idev->rndid, &tmpaddr->s6_addr[8], 8) == 0)
 | 
				
			||||||
		__ipv6_regen_rndid(idev);
 | 
							__ipv6_regen_rndid(idev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 *	Add prefix route.
 | 
					 *	Add prefix route.
 | 
				
			||||||
| 
						 | 
					@ -2207,9 +2183,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len, bool sllao)
 | 
				
			||||||
		if (ifp) {
 | 
							if (ifp) {
 | 
				
			||||||
			int flags;
 | 
								int flags;
 | 
				
			||||||
			unsigned long now;
 | 
								unsigned long now;
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
			struct inet6_ifaddr *ift;
 | 
								struct inet6_ifaddr *ift;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
			u32 stored_lft;
 | 
								u32 stored_lft;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* update lifetime (RFC2462 5.5.3 e) */
 | 
								/* update lifetime (RFC2462 5.5.3 e) */
 | 
				
			||||||
| 
						 | 
					@ -2250,7 +2224,6 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len, bool sllao)
 | 
				
			||||||
			} else
 | 
								} else
 | 
				
			||||||
				spin_unlock(&ifp->lock);
 | 
									spin_unlock(&ifp->lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
			read_lock_bh(&in6_dev->lock);
 | 
								read_lock_bh(&in6_dev->lock);
 | 
				
			||||||
			/* update all temporary addresses in the list */
 | 
								/* update all temporary addresses in the list */
 | 
				
			||||||
			list_for_each_entry(ift, &in6_dev->tempaddr_list,
 | 
								list_for_each_entry(ift, &in6_dev->tempaddr_list,
 | 
				
			||||||
| 
						 | 
					@ -2315,7 +2288,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len, bool sllao)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				read_unlock_bh(&in6_dev->lock);
 | 
									read_unlock_bh(&in6_dev->lock);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
#endif
 | 
					
 | 
				
			||||||
			in6_ifa_put(ifp);
 | 
								in6_ifa_put(ifp);
 | 
				
			||||||
			addrconf_verify(0);
 | 
								addrconf_verify(0);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -2995,7 +2968,6 @@ static int addrconf_ifdown(struct net_device *dev, int how)
 | 
				
			||||||
	if (!how)
 | 
						if (!how)
 | 
				
			||||||
		idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD|IF_READY);
 | 
							idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD|IF_READY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	if (how && del_timer(&idev->regen_timer))
 | 
						if (how && del_timer(&idev->regen_timer))
 | 
				
			||||||
		in6_dev_put(idev);
 | 
							in6_dev_put(idev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3015,7 +2987,6 @@ static int addrconf_ifdown(struct net_device *dev, int how)
 | 
				
			||||||
		in6_ifa_put(ifa);
 | 
							in6_ifa_put(ifa);
 | 
				
			||||||
		write_lock_bh(&idev->lock);
 | 
							write_lock_bh(&idev->lock);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (!list_empty(&idev->addr_list)) {
 | 
						while (!list_empty(&idev->addr_list)) {
 | 
				
			||||||
		ifa = list_first_entry(&idev->addr_list,
 | 
							ifa = list_first_entry(&idev->addr_list,
 | 
				
			||||||
| 
						 | 
					@ -3528,7 +3499,6 @@ static void addrconf_verify(unsigned long foo)
 | 
				
			||||||
					in6_ifa_put(ifp);
 | 
										in6_ifa_put(ifp);
 | 
				
			||||||
					goto restart;
 | 
										goto restart;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
			} else if ((ifp->flags&IFA_F_TEMPORARY) &&
 | 
								} else if ((ifp->flags&IFA_F_TEMPORARY) &&
 | 
				
			||||||
				   !(ifp->flags&IFA_F_TENTATIVE)) {
 | 
									   !(ifp->flags&IFA_F_TENTATIVE)) {
 | 
				
			||||||
				unsigned long regen_advance = ifp->idev->cnf.regen_max_retry *
 | 
									unsigned long regen_advance = ifp->idev->cnf.regen_max_retry *
 | 
				
			||||||
| 
						 | 
					@ -3556,7 +3526,6 @@ static void addrconf_verify(unsigned long foo)
 | 
				
			||||||
				} else if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next))
 | 
									} else if (time_before(ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ, next))
 | 
				
			||||||
					next = ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ;
 | 
										next = ifp->tstamp + ifp->prefered_lft * HZ - regen_advance * HZ;
 | 
				
			||||||
				spin_unlock(&ifp->lock);
 | 
									spin_unlock(&ifp->lock);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				/* ifp->prefered_lft <= ifp->valid_lft */
 | 
									/* ifp->prefered_lft <= ifp->valid_lft */
 | 
				
			||||||
				if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next))
 | 
									if (time_before(ifp->tstamp + ifp->prefered_lft * HZ, next))
 | 
				
			||||||
| 
						 | 
					@ -4128,13 +4097,11 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
 | 
				
			||||||
		jiffies_to_msecs(cnf->mldv1_unsolicited_report_interval);
 | 
							jiffies_to_msecs(cnf->mldv1_unsolicited_report_interval);
 | 
				
			||||||
	array[DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL] =
 | 
						array[DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL] =
 | 
				
			||||||
		jiffies_to_msecs(cnf->mldv2_unsolicited_report_interval);
 | 
							jiffies_to_msecs(cnf->mldv2_unsolicited_report_interval);
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
	array[DEVCONF_USE_TEMPADDR] = cnf->use_tempaddr;
 | 
						array[DEVCONF_USE_TEMPADDR] = cnf->use_tempaddr;
 | 
				
			||||||
	array[DEVCONF_TEMP_VALID_LFT] = cnf->temp_valid_lft;
 | 
						array[DEVCONF_TEMP_VALID_LFT] = cnf->temp_valid_lft;
 | 
				
			||||||
	array[DEVCONF_TEMP_PREFERED_LFT] = cnf->temp_prefered_lft;
 | 
						array[DEVCONF_TEMP_PREFERED_LFT] = cnf->temp_prefered_lft;
 | 
				
			||||||
	array[DEVCONF_REGEN_MAX_RETRY] = cnf->regen_max_retry;
 | 
						array[DEVCONF_REGEN_MAX_RETRY] = cnf->regen_max_retry;
 | 
				
			||||||
	array[DEVCONF_MAX_DESYNC_FACTOR] = cnf->max_desync_factor;
 | 
						array[DEVCONF_MAX_DESYNC_FACTOR] = cnf->max_desync_factor;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	array[DEVCONF_MAX_ADDRESSES] = cnf->max_addresses;
 | 
						array[DEVCONF_MAX_ADDRESSES] = cnf->max_addresses;
 | 
				
			||||||
	array[DEVCONF_ACCEPT_RA_DEFRTR] = cnf->accept_ra_defrtr;
 | 
						array[DEVCONF_ACCEPT_RA_DEFRTR] = cnf->accept_ra_defrtr;
 | 
				
			||||||
	array[DEVCONF_ACCEPT_RA_PINFO] = cnf->accept_ra_pinfo;
 | 
						array[DEVCONF_ACCEPT_RA_PINFO] = cnf->accept_ra_pinfo;
 | 
				
			||||||
| 
						 | 
					@ -4828,7 +4795,6 @@ static struct addrconf_sysctl_table
 | 
				
			||||||
			.mode		= 0644,
 | 
								.mode		= 0644,
 | 
				
			||||||
			.proc_handler	= proc_dointvec_ms_jiffies,
 | 
								.proc_handler	= proc_dointvec_ms_jiffies,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
#ifdef CONFIG_IPV6_PRIVACY
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			.procname	= "use_tempaddr",
 | 
								.procname	= "use_tempaddr",
 | 
				
			||||||
			.data		= &ipv6_devconf.use_tempaddr,
 | 
								.data		= &ipv6_devconf.use_tempaddr,
 | 
				
			||||||
| 
						 | 
					@ -4864,7 +4830,6 @@ static struct addrconf_sysctl_table
 | 
				
			||||||
			.mode		= 0644,
 | 
								.mode		= 0644,
 | 
				
			||||||
			.proc_handler	= proc_dointvec,
 | 
								.proc_handler	= proc_dointvec,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			.procname	= "max_addresses",
 | 
								.procname	= "max_addresses",
 | 
				
			||||||
			.data		= &ipv6_devconf.max_addresses,
 | 
								.data		= &ipv6_devconf.max_addresses,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue