aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/addrconf.c10
-rw-r--r--net/ipv6/inet6_connection_sock.c3
-rw-r--r--net/ipv6/mcast.c6
-rw-r--r--net/ipv6/ndisc.c7
-rw-r--r--net/ipv6/route.c1
5 files changed, 18 insertions, 9 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 171e5b55d7d6..e3854696988d 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -341,6 +341,7 @@ void in6_dev_finish_destroy(struct inet6_dev *idev)
341static struct inet6_dev * ipv6_add_dev(struct net_device *dev) 341static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
342{ 342{
343 struct inet6_dev *ndev; 343 struct inet6_dev *ndev;
344 struct in6_addr maddr;
344 345
345 ASSERT_RTNL(); 346 ASSERT_RTNL();
346 347
@@ -425,6 +426,11 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
425#endif 426#endif
426 /* protected by rtnl_lock */ 427 /* protected by rtnl_lock */
427 rcu_assign_pointer(dev->ip6_ptr, ndev); 428 rcu_assign_pointer(dev->ip6_ptr, ndev);
429
430 /* Join all-node multicast group */
431 ipv6_addr_all_nodes(&maddr);
432 ipv6_dev_mc_inc(dev, &maddr);
433
428 return ndev; 434 return ndev;
429} 435}
430 436
@@ -3387,7 +3393,7 @@ static void inline ipv6_store_devconf(struct ipv6_devconf *cnf,
3387#ifdef CONFIG_IPV6_ROUTER_PREF 3393#ifdef CONFIG_IPV6_ROUTER_PREF
3388 array[DEVCONF_ACCEPT_RA_RTR_PREF] = cnf->accept_ra_rtr_pref; 3394 array[DEVCONF_ACCEPT_RA_RTR_PREF] = cnf->accept_ra_rtr_pref;
3389 array[DEVCONF_RTR_PROBE_INTERVAL] = cnf->rtr_probe_interval; 3395 array[DEVCONF_RTR_PROBE_INTERVAL] = cnf->rtr_probe_interval;
3390#ifdef CONFIV_IPV6_ROUTE_INFO 3396#ifdef CONFIG_IPV6_ROUTE_INFO
3391 array[DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN] = cnf->accept_ra_rt_info_max_plen; 3397 array[DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN] = cnf->accept_ra_rt_info_max_plen;
3392#endif 3398#endif
3393#endif 3399#endif
@@ -3892,7 +3898,7 @@ static struct addrconf_sysctl_table
3892 .proc_handler = &proc_dointvec_jiffies, 3898 .proc_handler = &proc_dointvec_jiffies,
3893 .strategy = &sysctl_jiffies, 3899 .strategy = &sysctl_jiffies,
3894 }, 3900 },
3895#ifdef CONFIV_IPV6_ROUTE_INFO 3901#ifdef CONFIG_IPV6_ROUTE_INFO
3896 { 3902 {
3897 .ctl_name = NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN, 3903 .ctl_name = NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN,
3898 .procname = "accept_ra_rt_info_max_plen", 3904 .procname = "accept_ra_rt_info_max_plen",
diff --git a/net/ipv6/inet6_connection_sock.c b/net/ipv6/inet6_connection_sock.c
index c700302ad51a..116f94a49071 100644
--- a/net/ipv6/inet6_connection_sock.c
+++ b/net/ipv6/inet6_connection_sock.c
@@ -139,8 +139,9 @@ void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr * uaddr)
139 139
140EXPORT_SYMBOL_GPL(inet6_csk_addr2sockaddr); 140EXPORT_SYMBOL_GPL(inet6_csk_addr2sockaddr);
141 141
142int inet6_csk_xmit(struct sk_buff *skb, struct sock *sk, int ipfragok) 142int inet6_csk_xmit(struct sk_buff *skb, int ipfragok)
143{ 143{
144 struct sock *sk = skb->sk;
144 struct inet_sock *inet = inet_sk(sk); 145 struct inet_sock *inet = inet_sk(sk);
145 struct ipv6_pinfo *np = inet6_sk(sk); 146 struct ipv6_pinfo *np = inet6_sk(sk);
146 struct flowi fl; 147 struct flowi fl;
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index a1c231a04ac2..882cde4b4047 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -2258,8 +2258,6 @@ void ipv6_mc_up(struct inet6_dev *idev)
2258 2258
2259void ipv6_mc_init_dev(struct inet6_dev *idev) 2259void ipv6_mc_init_dev(struct inet6_dev *idev)
2260{ 2260{
2261 struct in6_addr maddr;
2262
2263 write_lock_bh(&idev->lock); 2261 write_lock_bh(&idev->lock);
2264 rwlock_init(&idev->mc_lock); 2262 rwlock_init(&idev->mc_lock);
2265 idev->mc_gq_running = 0; 2263 idev->mc_gq_running = 0;
@@ -2275,10 +2273,6 @@ void ipv6_mc_init_dev(struct inet6_dev *idev)
2275 idev->mc_maxdelay = IGMP6_UNSOLICITED_IVAL; 2273 idev->mc_maxdelay = IGMP6_UNSOLICITED_IVAL;
2276 idev->mc_v1_seen = 0; 2274 idev->mc_v1_seen = 0;
2277 write_unlock_bh(&idev->lock); 2275 write_unlock_bh(&idev->lock);
2278
2279 /* Add all-nodes address. */
2280 ipv6_addr_all_nodes(&maddr);
2281 ipv6_dev_mc_inc(idev->dev, &maddr);
2282} 2276}
2283 2277
2284/* 2278/*
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 6a9f616de37d..39bb658f3c44 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -1413,6 +1413,13 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
1413 return; 1413 return;
1414 } 1414 }
1415 1415
1416 if (!ipv6_addr_equal(&skb->nh.ipv6h->daddr, target) &&
1417 !(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) {
1418 ND_PRINTK2(KERN_WARNING
1419 "ICMPv6 Redirect: target address is not link-local.\n");
1420 return;
1421 }
1422
1416 ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &skb->nh.ipv6h->saddr, 1423 ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &skb->nh.ipv6h->saddr,
1417 dev->ifindex); 1424 dev->ifindex);
1418 1425
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 8c3d56871b50..5f0043c30b70 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2017,6 +2017,7 @@ static inline size_t rt6_nlmsg_size(void)
2017 + nla_total_size(4) /* RTA_IIF */ 2017 + nla_total_size(4) /* RTA_IIF */
2018 + nla_total_size(4) /* RTA_OIF */ 2018 + nla_total_size(4) /* RTA_OIF */
2019 + nla_total_size(4) /* RTA_PRIORITY */ 2019 + nla_total_size(4) /* RTA_PRIORITY */
2020 + RTAX_MAX * nla_total_size(4) /* RTA_METRICS */
2020 + nla_total_size(sizeof(struct rta_cacheinfo)); 2021 + nla_total_size(sizeof(struct rta_cacheinfo));
2021} 2022}
2022 2023