aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-09-23 12:09:27 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-23 12:09:27 -0400
commit1f6d80358dc9bbbeb56cb43384fa11fd645d9289 (patch)
tree152bfa5165292a8e4f06d536b6d222a68480e573 /net/ipv6
parenta2aeb02a8e6a9fef397c344245a54eeae67341f6 (diff)
parent98f75b8291a89ba6bf73e322ee467ce0bfeb91c1 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: arch/mips/net/bpf_jit.c drivers/net/can/flexcan.c Both the flexcan and MIPS bpf_jit conflicts were cases of simple overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/addrconf.c8
-rw-r--r--net/ipv6/anycast.c21
-rw-r--r--net/ipv6/ip6_output.c4
3 files changed, 28 insertions, 5 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 39d33355d7e8..e189480f8fd6 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3097,11 +3097,13 @@ restart:
3097 3097
3098 write_unlock_bh(&idev->lock); 3098 write_unlock_bh(&idev->lock);
3099 3099
3100 /* Step 5: Discard multicast list */ 3100 /* Step 5: Discard anycast and multicast list */
3101 if (how) 3101 if (how) {
3102 ipv6_ac_destroy_dev(idev);
3102 ipv6_mc_destroy_dev(idev); 3103 ipv6_mc_destroy_dev(idev);
3103 else 3104 } else {
3104 ipv6_mc_down(idev); 3105 ipv6_mc_down(idev);
3106 }
3105 3107
3106 idev->tstamp = jiffies; 3108 idev->tstamp = jiffies;
3107 3109
diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c
index 952c1fd06150..f5e319a8d4e2 100644
--- a/net/ipv6/anycast.c
+++ b/net/ipv6/anycast.c
@@ -345,6 +345,27 @@ static int ipv6_dev_ac_dec(struct net_device *dev, const struct in6_addr *addr)
345 return __ipv6_dev_ac_dec(idev, addr); 345 return __ipv6_dev_ac_dec(idev, addr);
346} 346}
347 347
348void ipv6_ac_destroy_dev(struct inet6_dev *idev)
349{
350 struct ifacaddr6 *aca;
351
352 write_lock_bh(&idev->lock);
353 while ((aca = idev->ac_list) != NULL) {
354 idev->ac_list = aca->aca_next;
355 write_unlock_bh(&idev->lock);
356
357 addrconf_leave_solict(idev, &aca->aca_addr);
358
359 dst_hold(&aca->aca_rt->dst);
360 ip6_del_rt(aca->aca_rt);
361
362 aca_put(aca);
363
364 write_lock_bh(&idev->lock);
365 }
366 write_unlock_bh(&idev->lock);
367}
368
348/* 369/*
349 * check if the interface has this anycast address 370 * check if the interface has this anycast address
350 * called with rcu_read_lock() 371 * called with rcu_read_lock()
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 2e6a0dbf7fb3..8e950c250ada 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1004,7 +1004,7 @@ struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
1004 if (final_dst) 1004 if (final_dst)
1005 fl6->daddr = *final_dst; 1005 fl6->daddr = *final_dst;
1006 1006
1007 return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); 1007 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1008} 1008}
1009EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow); 1009EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow);
1010 1010
@@ -1036,7 +1036,7 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
1036 if (final_dst) 1036 if (final_dst)
1037 fl6->daddr = *final_dst; 1037 fl6->daddr = *final_dst;
1038 1038
1039 return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); 1039 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1040} 1040}
1041EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow); 1041EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow);
1042 1042