Merge remote-tracking branches 'regulator/topic/pv88090', 'regulator/topic/qcom-smd...
[cascardo/linux.git] / net / ipv6 / ndisc.c
1 /*
2  *      Neighbour Discovery for IPv6
3  *      Linux INET6 implementation
4  *
5  *      Authors:
6  *      Pedro Roque             <roque@di.fc.ul.pt>
7  *      Mike Shaver             <shaver@ingenia.com>
8  *
9  *      This program is free software; you can redistribute it and/or
10  *      modify it under the terms of the GNU General Public License
11  *      as published by the Free Software Foundation; either version
12  *      2 of the License, or (at your option) any later version.
13  */
14
15 /*
16  *      Changes:
17  *
18  *      Alexey I. Froloff               :       RFC6106 (DNSSL) support
19  *      Pierre Ynard                    :       export userland ND options
20  *                                              through netlink (RDNSS support)
21  *      Lars Fenneberg                  :       fixed MTU setting on receipt
22  *                                              of an RA.
23  *      Janos Farkas                    :       kmalloc failure checks
24  *      Alexey Kuznetsov                :       state machine reworked
25  *                                              and moved to net/core.
26  *      Pekka Savola                    :       RFC2461 validation
27  *      YOSHIFUJI Hideaki @USAGI        :       Verify ND options properly
28  */
29
30 #define pr_fmt(fmt) "ICMPv6: " fmt
31
32 #include <linux/module.h>
33 #include <linux/errno.h>
34 #include <linux/types.h>
35 #include <linux/socket.h>
36 #include <linux/sockios.h>
37 #include <linux/sched.h>
38 #include <linux/net.h>
39 #include <linux/in6.h>
40 #include <linux/route.h>
41 #include <linux/init.h>
42 #include <linux/rcupdate.h>
43 #include <linux/slab.h>
44 #ifdef CONFIG_SYSCTL
45 #include <linux/sysctl.h>
46 #endif
47
48 #include <linux/if_addr.h>
49 #include <linux/if_arp.h>
50 #include <linux/ipv6.h>
51 #include <linux/icmpv6.h>
52 #include <linux/jhash.h>
53
54 #include <net/sock.h>
55 #include <net/snmp.h>
56
57 #include <net/ipv6.h>
58 #include <net/protocol.h>
59 #include <net/ndisc.h>
60 #include <net/ip6_route.h>
61 #include <net/addrconf.h>
62 #include <net/icmp.h>
63
64 #include <net/netlink.h>
65 #include <linux/rtnetlink.h>
66
67 #include <net/flow.h>
68 #include <net/ip6_checksum.h>
69 #include <net/inet_common.h>
70 #include <net/l3mdev.h>
71 #include <linux/proc_fs.h>
72
73 #include <linux/netfilter.h>
74 #include <linux/netfilter_ipv6.h>
75
76 /* Set to 3 to get tracing... */
77 #define ND_DEBUG 1
78
79 #define ND_PRINTK(val, level, fmt, ...)                         \
80 do {                                                            \
81         if (val <= ND_DEBUG)                                    \
82                 net_##level##_ratelimited(fmt, ##__VA_ARGS__);  \
83 } while (0)
84
85 static u32 ndisc_hash(const void *pkey,
86                       const struct net_device *dev,
87                       __u32 *hash_rnd);
88 static bool ndisc_key_eq(const struct neighbour *neigh, const void *pkey);
89 static int ndisc_constructor(struct neighbour *neigh);
90 static void ndisc_solicit(struct neighbour *neigh, struct sk_buff *skb);
91 static void ndisc_error_report(struct neighbour *neigh, struct sk_buff *skb);
92 static int pndisc_constructor(struct pneigh_entry *n);
93 static void pndisc_destructor(struct pneigh_entry *n);
94 static void pndisc_redo(struct sk_buff *skb);
95
96 static const struct neigh_ops ndisc_generic_ops = {
97         .family =               AF_INET6,
98         .solicit =              ndisc_solicit,
99         .error_report =         ndisc_error_report,
100         .output =               neigh_resolve_output,
101         .connected_output =     neigh_connected_output,
102 };
103
104 static const struct neigh_ops ndisc_hh_ops = {
105         .family =               AF_INET6,
106         .solicit =              ndisc_solicit,
107         .error_report =         ndisc_error_report,
108         .output =               neigh_resolve_output,
109         .connected_output =     neigh_resolve_output,
110 };
111
112
113 static const struct neigh_ops ndisc_direct_ops = {
114         .family =               AF_INET6,
115         .output =               neigh_direct_output,
116         .connected_output =     neigh_direct_output,
117 };
118
119 struct neigh_table nd_tbl = {
120         .family =       AF_INET6,
121         .key_len =      sizeof(struct in6_addr),
122         .protocol =     cpu_to_be16(ETH_P_IPV6),
123         .hash =         ndisc_hash,
124         .key_eq =       ndisc_key_eq,
125         .constructor =  ndisc_constructor,
126         .pconstructor = pndisc_constructor,
127         .pdestructor =  pndisc_destructor,
128         .proxy_redo =   pndisc_redo,
129         .id =           "ndisc_cache",
130         .parms = {
131                 .tbl                    = &nd_tbl,
132                 .reachable_time         = ND_REACHABLE_TIME,
133                 .data = {
134                         [NEIGH_VAR_MCAST_PROBES] = 3,
135                         [NEIGH_VAR_UCAST_PROBES] = 3,
136                         [NEIGH_VAR_RETRANS_TIME] = ND_RETRANS_TIMER,
137                         [NEIGH_VAR_BASE_REACHABLE_TIME] = ND_REACHABLE_TIME,
138                         [NEIGH_VAR_DELAY_PROBE_TIME] = 5 * HZ,
139                         [NEIGH_VAR_GC_STALETIME] = 60 * HZ,
140                         [NEIGH_VAR_QUEUE_LEN_BYTES] = 64 * 1024,
141                         [NEIGH_VAR_PROXY_QLEN] = 64,
142                         [NEIGH_VAR_ANYCAST_DELAY] = 1 * HZ,
143                         [NEIGH_VAR_PROXY_DELAY] = (8 * HZ) / 10,
144                 },
145         },
146         .gc_interval =    30 * HZ,
147         .gc_thresh1 =    128,
148         .gc_thresh2 =    512,
149         .gc_thresh3 =   1024,
150 };
151 EXPORT_SYMBOL_GPL(nd_tbl);
152
153 static void ndisc_fill_addr_option(struct sk_buff *skb, int type, void *data)
154 {
155         int pad   = ndisc_addr_option_pad(skb->dev->type);
156         int data_len = skb->dev->addr_len;
157         int space = ndisc_opt_addr_space(skb->dev);
158         u8 *opt = skb_put(skb, space);
159
160         opt[0] = type;
161         opt[1] = space>>3;
162
163         memset(opt + 2, 0, pad);
164         opt   += pad;
165         space -= pad;
166
167         memcpy(opt+2, data, data_len);
168         data_len += 2;
169         opt += data_len;
170         space -= data_len;
171         if (space > 0)
172                 memset(opt, 0, space);
173 }
174
175 static struct nd_opt_hdr *ndisc_next_option(struct nd_opt_hdr *cur,
176                                             struct nd_opt_hdr *end)
177 {
178         int type;
179         if (!cur || !end || cur >= end)
180                 return NULL;
181         type = cur->nd_opt_type;
182         do {
183                 cur = ((void *)cur) + (cur->nd_opt_len << 3);
184         } while (cur < end && cur->nd_opt_type != type);
185         return cur <= end && cur->nd_opt_type == type ? cur : NULL;
186 }
187
188 static inline int ndisc_is_useropt(struct nd_opt_hdr *opt)
189 {
190         return opt->nd_opt_type == ND_OPT_RDNSS ||
191                 opt->nd_opt_type == ND_OPT_DNSSL;
192 }
193
194 static struct nd_opt_hdr *ndisc_next_useropt(struct nd_opt_hdr *cur,
195                                              struct nd_opt_hdr *end)
196 {
197         if (!cur || !end || cur >= end)
198                 return NULL;
199         do {
200                 cur = ((void *)cur) + (cur->nd_opt_len << 3);
201         } while (cur < end && !ndisc_is_useropt(cur));
202         return cur <= end && ndisc_is_useropt(cur) ? cur : NULL;
203 }
204
205 struct ndisc_options *ndisc_parse_options(u8 *opt, int opt_len,
206                                           struct ndisc_options *ndopts)
207 {
208         struct nd_opt_hdr *nd_opt = (struct nd_opt_hdr *)opt;
209
210         if (!nd_opt || opt_len < 0 || !ndopts)
211                 return NULL;
212         memset(ndopts, 0, sizeof(*ndopts));
213         while (opt_len) {
214                 int l;
215                 if (opt_len < sizeof(struct nd_opt_hdr))
216                         return NULL;
217                 l = nd_opt->nd_opt_len << 3;
218                 if (opt_len < l || l == 0)
219                         return NULL;
220                 switch (nd_opt->nd_opt_type) {
221                 case ND_OPT_SOURCE_LL_ADDR:
222                 case ND_OPT_TARGET_LL_ADDR:
223                 case ND_OPT_MTU:
224                 case ND_OPT_REDIRECT_HDR:
225                         if (ndopts->nd_opt_array[nd_opt->nd_opt_type]) {
226                                 ND_PRINTK(2, warn,
227                                           "%s: duplicated ND6 option found: type=%d\n",
228                                           __func__, nd_opt->nd_opt_type);
229                         } else {
230                                 ndopts->nd_opt_array[nd_opt->nd_opt_type] = nd_opt;
231                         }
232                         break;
233                 case ND_OPT_PREFIX_INFO:
234                         ndopts->nd_opts_pi_end = nd_opt;
235                         if (!ndopts->nd_opt_array[nd_opt->nd_opt_type])
236                                 ndopts->nd_opt_array[nd_opt->nd_opt_type] = nd_opt;
237                         break;
238 #ifdef CONFIG_IPV6_ROUTE_INFO
239                 case ND_OPT_ROUTE_INFO:
240                         ndopts->nd_opts_ri_end = nd_opt;
241                         if (!ndopts->nd_opts_ri)
242                                 ndopts->nd_opts_ri = nd_opt;
243                         break;
244 #endif
245                 default:
246                         if (ndisc_is_useropt(nd_opt)) {
247                                 ndopts->nd_useropts_end = nd_opt;
248                                 if (!ndopts->nd_useropts)
249                                         ndopts->nd_useropts = nd_opt;
250                         } else {
251                                 /*
252                                  * Unknown options must be silently ignored,
253                                  * to accommodate future extension to the
254                                  * protocol.
255                                  */
256                                 ND_PRINTK(2, notice,
257                                           "%s: ignored unsupported option; type=%d, len=%d\n",
258                                           __func__,
259                                           nd_opt->nd_opt_type,
260                                           nd_opt->nd_opt_len);
261                         }
262                 }
263                 opt_len -= l;
264                 nd_opt = ((void *)nd_opt) + l;
265         }
266         return ndopts;
267 }
268
269 int ndisc_mc_map(const struct in6_addr *addr, char *buf, struct net_device *dev, int dir)
270 {
271         switch (dev->type) {
272         case ARPHRD_ETHER:
273         case ARPHRD_IEEE802:    /* Not sure. Check it later. --ANK */
274         case ARPHRD_FDDI:
275                 ipv6_eth_mc_map(addr, buf);
276                 return 0;
277         case ARPHRD_ARCNET:
278                 ipv6_arcnet_mc_map(addr, buf);
279                 return 0;
280         case ARPHRD_INFINIBAND:
281                 ipv6_ib_mc_map(addr, dev->broadcast, buf);
282                 return 0;
283         case ARPHRD_IPGRE:
284                 return ipv6_ipgre_mc_map(addr, dev->broadcast, buf);
285         default:
286                 if (dir) {
287                         memcpy(buf, dev->broadcast, dev->addr_len);
288                         return 0;
289                 }
290         }
291         return -EINVAL;
292 }
293 EXPORT_SYMBOL(ndisc_mc_map);
294
295 static u32 ndisc_hash(const void *pkey,
296                       const struct net_device *dev,
297                       __u32 *hash_rnd)
298 {
299         return ndisc_hashfn(pkey, dev, hash_rnd);
300 }
301
302 static bool ndisc_key_eq(const struct neighbour *n, const void *pkey)
303 {
304         return neigh_key_eq128(n, pkey);
305 }
306
307 static int ndisc_constructor(struct neighbour *neigh)
308 {
309         struct in6_addr *addr = (struct in6_addr *)&neigh->primary_key;
310         struct net_device *dev = neigh->dev;
311         struct inet6_dev *in6_dev;
312         struct neigh_parms *parms;
313         bool is_multicast = ipv6_addr_is_multicast(addr);
314
315         in6_dev = in6_dev_get(dev);
316         if (!in6_dev) {
317                 return -EINVAL;
318         }
319
320         parms = in6_dev->nd_parms;
321         __neigh_parms_put(neigh->parms);
322         neigh->parms = neigh_parms_clone(parms);
323
324         neigh->type = is_multicast ? RTN_MULTICAST : RTN_UNICAST;
325         if (!dev->header_ops) {
326                 neigh->nud_state = NUD_NOARP;
327                 neigh->ops = &ndisc_direct_ops;
328                 neigh->output = neigh_direct_output;
329         } else {
330                 if (is_multicast) {
331                         neigh->nud_state = NUD_NOARP;
332                         ndisc_mc_map(addr, neigh->ha, dev, 1);
333                 } else if (dev->flags&(IFF_NOARP|IFF_LOOPBACK)) {
334                         neigh->nud_state = NUD_NOARP;
335                         memcpy(neigh->ha, dev->dev_addr, dev->addr_len);
336                         if (dev->flags&IFF_LOOPBACK)
337                                 neigh->type = RTN_LOCAL;
338                 } else if (dev->flags&IFF_POINTOPOINT) {
339                         neigh->nud_state = NUD_NOARP;
340                         memcpy(neigh->ha, dev->broadcast, dev->addr_len);
341                 }
342                 if (dev->header_ops->cache)
343                         neigh->ops = &ndisc_hh_ops;
344                 else
345                         neigh->ops = &ndisc_generic_ops;
346                 if (neigh->nud_state&NUD_VALID)
347                         neigh->output = neigh->ops->connected_output;
348                 else
349                         neigh->output = neigh->ops->output;
350         }
351         in6_dev_put(in6_dev);
352         return 0;
353 }
354
355 static int pndisc_constructor(struct pneigh_entry *n)
356 {
357         struct in6_addr *addr = (struct in6_addr *)&n->key;
358         struct in6_addr maddr;
359         struct net_device *dev = n->dev;
360
361         if (!dev || !__in6_dev_get(dev))
362                 return -EINVAL;
363         addrconf_addr_solict_mult(addr, &maddr);
364         ipv6_dev_mc_inc(dev, &maddr);
365         return 0;
366 }
367
368 static void pndisc_destructor(struct pneigh_entry *n)
369 {
370         struct in6_addr *addr = (struct in6_addr *)&n->key;
371         struct in6_addr maddr;
372         struct net_device *dev = n->dev;
373
374         if (!dev || !__in6_dev_get(dev))
375                 return;
376         addrconf_addr_solict_mult(addr, &maddr);
377         ipv6_dev_mc_dec(dev, &maddr);
378 }
379
380 static struct sk_buff *ndisc_alloc_skb(struct net_device *dev,
381                                        int len)
382 {
383         int hlen = LL_RESERVED_SPACE(dev);
384         int tlen = dev->needed_tailroom;
385         struct sock *sk = dev_net(dev)->ipv6.ndisc_sk;
386         struct sk_buff *skb;
387
388         skb = alloc_skb(hlen + sizeof(struct ipv6hdr) + len + tlen, GFP_ATOMIC);
389         if (!skb) {
390                 ND_PRINTK(0, err, "ndisc: %s failed to allocate an skb\n",
391                           __func__);
392                 return NULL;
393         }
394
395         skb->protocol = htons(ETH_P_IPV6);
396         skb->dev = dev;
397
398         skb_reserve(skb, hlen + sizeof(struct ipv6hdr));
399         skb_reset_transport_header(skb);
400
401         /* Manually assign socket ownership as we avoid calling
402          * sock_alloc_send_pskb() to bypass wmem buffer limits
403          */
404         skb_set_owner_w(skb, sk);
405
406         return skb;
407 }
408
409 static void ip6_nd_hdr(struct sk_buff *skb,
410                        const struct in6_addr *saddr,
411                        const struct in6_addr *daddr,
412                        int hop_limit, int len)
413 {
414         struct ipv6hdr *hdr;
415
416         skb_push(skb, sizeof(*hdr));
417         skb_reset_network_header(skb);
418         hdr = ipv6_hdr(skb);
419
420         ip6_flow_hdr(hdr, 0, 0);
421
422         hdr->payload_len = htons(len);
423         hdr->nexthdr = IPPROTO_ICMPV6;
424         hdr->hop_limit = hop_limit;
425
426         hdr->saddr = *saddr;
427         hdr->daddr = *daddr;
428 }
429
430 static void ndisc_send_skb(struct sk_buff *skb,
431                            const struct in6_addr *daddr,
432                            const struct in6_addr *saddr)
433 {
434         struct dst_entry *dst = skb_dst(skb);
435         struct net *net = dev_net(skb->dev);
436         struct sock *sk = net->ipv6.ndisc_sk;
437         struct inet6_dev *idev;
438         int err;
439         struct icmp6hdr *icmp6h = icmp6_hdr(skb);
440         u8 type;
441
442         type = icmp6h->icmp6_type;
443
444         if (!dst) {
445                 struct flowi6 fl6;
446                 int oif = l3mdev_fib_oif(skb->dev);
447
448                 icmpv6_flow_init(sk, &fl6, type, saddr, daddr, oif);
449                 if (oif != skb->dev->ifindex)
450                         fl6.flowi6_flags |= FLOWI_FLAG_L3MDEV_SRC;
451                 dst = icmp6_dst_alloc(skb->dev, &fl6);
452                 if (IS_ERR(dst)) {
453                         kfree_skb(skb);
454                         return;
455                 }
456
457                 skb_dst_set(skb, dst);
458         }
459
460         icmp6h->icmp6_cksum = csum_ipv6_magic(saddr, daddr, skb->len,
461                                               IPPROTO_ICMPV6,
462                                               csum_partial(icmp6h,
463                                                            skb->len, 0));
464
465         ip6_nd_hdr(skb, saddr, daddr, inet6_sk(sk)->hop_limit, skb->len);
466
467         rcu_read_lock();
468         idev = __in6_dev_get(dst->dev);
469         IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
470
471         err = NF_HOOK(NFPROTO_IPV6, NF_INET_LOCAL_OUT,
472                       net, sk, skb, NULL, dst->dev,
473                       dst_output);
474         if (!err) {
475                 ICMP6MSGOUT_INC_STATS(net, idev, type);
476                 ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
477         }
478
479         rcu_read_unlock();
480 }
481
482 void ndisc_send_na(struct net_device *dev, const struct in6_addr *daddr,
483                    const struct in6_addr *solicited_addr,
484                    bool router, bool solicited, bool override, bool inc_opt)
485 {
486         struct sk_buff *skb;
487         struct in6_addr tmpaddr;
488         struct inet6_ifaddr *ifp;
489         const struct in6_addr *src_addr;
490         struct nd_msg *msg;
491         int optlen = 0;
492
493         /* for anycast or proxy, solicited_addr != src_addr */
494         ifp = ipv6_get_ifaddr(dev_net(dev), solicited_addr, dev, 1);
495         if (ifp) {
496                 src_addr = solicited_addr;
497                 if (ifp->flags & IFA_F_OPTIMISTIC)
498                         override = false;
499                 inc_opt |= ifp->idev->cnf.force_tllao;
500                 in6_ifa_put(ifp);
501         } else {
502                 if (ipv6_dev_get_saddr(dev_net(dev), dev, daddr,
503                                        inet6_sk(dev_net(dev)->ipv6.ndisc_sk)->srcprefs,
504                                        &tmpaddr))
505                         return;
506                 src_addr = &tmpaddr;
507         }
508
509         if (!dev->addr_len)
510                 inc_opt = 0;
511         if (inc_opt)
512                 optlen += ndisc_opt_addr_space(dev);
513
514         skb = ndisc_alloc_skb(dev, sizeof(*msg) + optlen);
515         if (!skb)
516                 return;
517
518         msg = (struct nd_msg *)skb_put(skb, sizeof(*msg));
519         *msg = (struct nd_msg) {
520                 .icmph = {
521                         .icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT,
522                         .icmp6_router = router,
523                         .icmp6_solicited = solicited,
524                         .icmp6_override = override,
525                 },
526                 .target = *solicited_addr,
527         };
528
529         if (inc_opt)
530                 ndisc_fill_addr_option(skb, ND_OPT_TARGET_LL_ADDR,
531                                        dev->dev_addr);
532
533
534         ndisc_send_skb(skb, daddr, src_addr);
535 }
536
537 static void ndisc_send_unsol_na(struct net_device *dev)
538 {
539         struct inet6_dev *idev;
540         struct inet6_ifaddr *ifa;
541
542         idev = in6_dev_get(dev);
543         if (!idev)
544                 return;
545
546         read_lock_bh(&idev->lock);
547         list_for_each_entry(ifa, &idev->addr_list, if_list) {
548                 ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifa->addr,
549                               /*router=*/ !!idev->cnf.forwarding,
550                               /*solicited=*/ false, /*override=*/ true,
551                               /*inc_opt=*/ true);
552         }
553         read_unlock_bh(&idev->lock);
554
555         in6_dev_put(idev);
556 }
557
558 void ndisc_send_ns(struct net_device *dev, const struct in6_addr *solicit,
559                    const struct in6_addr *daddr, const struct in6_addr *saddr)
560 {
561         struct sk_buff *skb;
562         struct in6_addr addr_buf;
563         int inc_opt = dev->addr_len;
564         int optlen = 0;
565         struct nd_msg *msg;
566
567         if (!saddr) {
568                 if (ipv6_get_lladdr(dev, &addr_buf,
569                                    (IFA_F_TENTATIVE|IFA_F_OPTIMISTIC)))
570                         return;
571                 saddr = &addr_buf;
572         }
573
574         if (ipv6_addr_any(saddr))
575                 inc_opt = false;
576         if (inc_opt)
577                 optlen += ndisc_opt_addr_space(dev);
578
579         skb = ndisc_alloc_skb(dev, sizeof(*msg) + optlen);
580         if (!skb)
581                 return;
582
583         msg = (struct nd_msg *)skb_put(skb, sizeof(*msg));
584         *msg = (struct nd_msg) {
585                 .icmph = {
586                         .icmp6_type = NDISC_NEIGHBOUR_SOLICITATION,
587                 },
588                 .target = *solicit,
589         };
590
591         if (inc_opt)
592                 ndisc_fill_addr_option(skb, ND_OPT_SOURCE_LL_ADDR,
593                                        dev->dev_addr);
594
595         ndisc_send_skb(skb, daddr, saddr);
596 }
597
598 void ndisc_send_rs(struct net_device *dev, const struct in6_addr *saddr,
599                    const struct in6_addr *daddr)
600 {
601         struct sk_buff *skb;
602         struct rs_msg *msg;
603         int send_sllao = dev->addr_len;
604         int optlen = 0;
605
606 #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
607         /*
608          * According to section 2.2 of RFC 4429, we must not
609          * send router solicitations with a sllao from
610          * optimistic addresses, but we may send the solicitation
611          * if we don't include the sllao.  So here we check
612          * if our address is optimistic, and if so, we
613          * suppress the inclusion of the sllao.
614          */
615         if (send_sllao) {
616                 struct inet6_ifaddr *ifp = ipv6_get_ifaddr(dev_net(dev), saddr,
617                                                            dev, 1);
618                 if (ifp) {
619                         if (ifp->flags & IFA_F_OPTIMISTIC)  {
620                                 send_sllao = 0;
621                         }
622                         in6_ifa_put(ifp);
623                 } else {
624                         send_sllao = 0;
625                 }
626         }
627 #endif
628         if (send_sllao)
629                 optlen += ndisc_opt_addr_space(dev);
630
631         skb = ndisc_alloc_skb(dev, sizeof(*msg) + optlen);
632         if (!skb)
633                 return;
634
635         msg = (struct rs_msg *)skb_put(skb, sizeof(*msg));
636         *msg = (struct rs_msg) {
637                 .icmph = {
638                         .icmp6_type = NDISC_ROUTER_SOLICITATION,
639                 },
640         };
641
642         if (send_sllao)
643                 ndisc_fill_addr_option(skb, ND_OPT_SOURCE_LL_ADDR,
644                                        dev->dev_addr);
645
646         ndisc_send_skb(skb, daddr, saddr);
647 }
648
649
650 static void ndisc_error_report(struct neighbour *neigh, struct sk_buff *skb)
651 {
652         /*
653          *      "The sender MUST return an ICMP
654          *       destination unreachable"
655          */
656         dst_link_failure(skb);
657         kfree_skb(skb);
658 }
659
660 /* Called with locked neigh: either read or both */
661
662 static void ndisc_solicit(struct neighbour *neigh, struct sk_buff *skb)
663 {
664         struct in6_addr *saddr = NULL;
665         struct in6_addr mcaddr;
666         struct net_device *dev = neigh->dev;
667         struct in6_addr *target = (struct in6_addr *)&neigh->primary_key;
668         int probes = atomic_read(&neigh->probes);
669
670         if (skb && ipv6_chk_addr_and_flags(dev_net(dev), &ipv6_hdr(skb)->saddr,
671                                            dev, 1,
672                                            IFA_F_TENTATIVE|IFA_F_OPTIMISTIC))
673                 saddr = &ipv6_hdr(skb)->saddr;
674         probes -= NEIGH_VAR(neigh->parms, UCAST_PROBES);
675         if (probes < 0) {
676                 if (!(neigh->nud_state & NUD_VALID)) {
677                         ND_PRINTK(1, dbg,
678                                   "%s: trying to ucast probe in NUD_INVALID: %pI6\n",
679                                   __func__, target);
680                 }
681                 ndisc_send_ns(dev, target, target, saddr);
682         } else if ((probes -= NEIGH_VAR(neigh->parms, APP_PROBES)) < 0) {
683                 neigh_app_ns(neigh);
684         } else {
685                 addrconf_addr_solict_mult(target, &mcaddr);
686                 ndisc_send_ns(dev, target, &mcaddr, saddr);
687         }
688 }
689
690 static int pndisc_is_router(const void *pkey,
691                             struct net_device *dev)
692 {
693         struct pneigh_entry *n;
694         int ret = -1;
695
696         read_lock_bh(&nd_tbl.lock);
697         n = __pneigh_lookup(&nd_tbl, dev_net(dev), pkey, dev);
698         if (n)
699                 ret = !!(n->flags & NTF_ROUTER);
700         read_unlock_bh(&nd_tbl.lock);
701
702         return ret;
703 }
704
705 static void ndisc_recv_ns(struct sk_buff *skb)
706 {
707         struct nd_msg *msg = (struct nd_msg *)skb_transport_header(skb);
708         const struct in6_addr *saddr = &ipv6_hdr(skb)->saddr;
709         const struct in6_addr *daddr = &ipv6_hdr(skb)->daddr;
710         u8 *lladdr = NULL;
711         u32 ndoptlen = skb_tail_pointer(skb) - (skb_transport_header(skb) +
712                                     offsetof(struct nd_msg, opt));
713         struct ndisc_options ndopts;
714         struct net_device *dev = skb->dev;
715         struct inet6_ifaddr *ifp;
716         struct inet6_dev *idev = NULL;
717         struct neighbour *neigh;
718         int dad = ipv6_addr_any(saddr);
719         bool inc;
720         int is_router = -1;
721
722         if (skb->len < sizeof(struct nd_msg)) {
723                 ND_PRINTK(2, warn, "NS: packet too short\n");
724                 return;
725         }
726
727         if (ipv6_addr_is_multicast(&msg->target)) {
728                 ND_PRINTK(2, warn, "NS: multicast target address\n");
729                 return;
730         }
731
732         /*
733          * RFC2461 7.1.1:
734          * DAD has to be destined for solicited node multicast address.
735          */
736         if (dad && !ipv6_addr_is_solict_mult(daddr)) {
737                 ND_PRINTK(2, warn, "NS: bad DAD packet (wrong destination)\n");
738                 return;
739         }
740
741         if (!ndisc_parse_options(msg->opt, ndoptlen, &ndopts)) {
742                 ND_PRINTK(2, warn, "NS: invalid ND options\n");
743                 return;
744         }
745
746         if (ndopts.nd_opts_src_lladdr) {
747                 lladdr = ndisc_opt_addr_data(ndopts.nd_opts_src_lladdr, dev);
748                 if (!lladdr) {
749                         ND_PRINTK(2, warn,
750                                   "NS: invalid link-layer address length\n");
751                         return;
752                 }
753
754                 /* RFC2461 7.1.1:
755                  *      If the IP source address is the unspecified address,
756                  *      there MUST NOT be source link-layer address option
757                  *      in the message.
758                  */
759                 if (dad) {
760                         ND_PRINTK(2, warn,
761                                   "NS: bad DAD packet (link-layer address option)\n");
762                         return;
763                 }
764         }
765
766         inc = ipv6_addr_is_multicast(daddr);
767
768         ifp = ipv6_get_ifaddr(dev_net(dev), &msg->target, dev, 1);
769         if (ifp) {
770 have_ifp:
771                 if (ifp->flags & (IFA_F_TENTATIVE|IFA_F_OPTIMISTIC)) {
772                         if (dad) {
773                                 /*
774                                  * We are colliding with another node
775                                  * who is doing DAD
776                                  * so fail our DAD process
777                                  */
778                                 addrconf_dad_failure(ifp);
779                                 return;
780                         } else {
781                                 /*
782                                  * This is not a dad solicitation.
783                                  * If we are an optimistic node,
784                                  * we should respond.
785                                  * Otherwise, we should ignore it.
786                                  */
787                                 if (!(ifp->flags & IFA_F_OPTIMISTIC))
788                                         goto out;
789                         }
790                 }
791
792                 idev = ifp->idev;
793         } else {
794                 struct net *net = dev_net(dev);
795
796                 /* perhaps an address on the master device */
797                 if (netif_is_l3_slave(dev)) {
798                         struct net_device *mdev;
799
800                         mdev = netdev_master_upper_dev_get_rcu(dev);
801                         if (mdev) {
802                                 ifp = ipv6_get_ifaddr(net, &msg->target, mdev, 1);
803                                 if (ifp)
804                                         goto have_ifp;
805                         }
806                 }
807
808                 idev = in6_dev_get(dev);
809                 if (!idev) {
810                         /* XXX: count this drop? */
811                         return;
812                 }
813
814                 if (ipv6_chk_acast_addr(net, dev, &msg->target) ||
815                     (idev->cnf.forwarding &&
816                      (net->ipv6.devconf_all->proxy_ndp || idev->cnf.proxy_ndp) &&
817                      (is_router = pndisc_is_router(&msg->target, dev)) >= 0)) {
818                         if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) &&
819                             skb->pkt_type != PACKET_HOST &&
820                             inc &&
821                             NEIGH_VAR(idev->nd_parms, PROXY_DELAY) != 0) {
822                                 /*
823                                  * for anycast or proxy,
824                                  * sender should delay its response
825                                  * by a random time between 0 and
826                                  * MAX_ANYCAST_DELAY_TIME seconds.
827                                  * (RFC2461) -- yoshfuji
828                                  */
829                                 struct sk_buff *n = skb_clone(skb, GFP_ATOMIC);
830                                 if (n)
831                                         pneigh_enqueue(&nd_tbl, idev->nd_parms, n);
832                                 goto out;
833                         }
834                 } else
835                         goto out;
836         }
837
838         if (is_router < 0)
839                 is_router = idev->cnf.forwarding;
840
841         if (dad) {
842                 ndisc_send_na(dev, &in6addr_linklocal_allnodes, &msg->target,
843                               !!is_router, false, (ifp != NULL), true);
844                 goto out;
845         }
846
847         if (inc)
848                 NEIGH_CACHE_STAT_INC(&nd_tbl, rcv_probes_mcast);
849         else
850                 NEIGH_CACHE_STAT_INC(&nd_tbl, rcv_probes_ucast);
851
852         /*
853          *      update / create cache entry
854          *      for the source address
855          */
856         neigh = __neigh_lookup(&nd_tbl, saddr, dev,
857                                !inc || lladdr || !dev->addr_len);
858         if (neigh)
859                 neigh_update(neigh, lladdr, NUD_STALE,
860                              NEIGH_UPDATE_F_WEAK_OVERRIDE|
861                              NEIGH_UPDATE_F_OVERRIDE);
862         if (neigh || !dev->header_ops) {
863                 ndisc_send_na(dev, saddr, &msg->target, !!is_router,
864                               true, (ifp != NULL && inc), inc);
865                 if (neigh)
866                         neigh_release(neigh);
867         }
868
869 out:
870         if (ifp)
871                 in6_ifa_put(ifp);
872         else
873                 in6_dev_put(idev);
874 }
875
876 static void ndisc_recv_na(struct sk_buff *skb)
877 {
878         struct nd_msg *msg = (struct nd_msg *)skb_transport_header(skb);
879         struct in6_addr *saddr = &ipv6_hdr(skb)->saddr;
880         const struct in6_addr *daddr = &ipv6_hdr(skb)->daddr;
881         u8 *lladdr = NULL;
882         u32 ndoptlen = skb_tail_pointer(skb) - (skb_transport_header(skb) +
883                                     offsetof(struct nd_msg, opt));
884         struct ndisc_options ndopts;
885         struct net_device *dev = skb->dev;
886         struct inet6_ifaddr *ifp;
887         struct neighbour *neigh;
888
889         if (skb->len < sizeof(struct nd_msg)) {
890                 ND_PRINTK(2, warn, "NA: packet too short\n");
891                 return;
892         }
893
894         if (ipv6_addr_is_multicast(&msg->target)) {
895                 ND_PRINTK(2, warn, "NA: target address is multicast\n");
896                 return;
897         }
898
899         if (ipv6_addr_is_multicast(daddr) &&
900             msg->icmph.icmp6_solicited) {
901                 ND_PRINTK(2, warn, "NA: solicited NA is multicasted\n");
902                 return;
903         }
904
905         if (!ndisc_parse_options(msg->opt, ndoptlen, &ndopts)) {
906                 ND_PRINTK(2, warn, "NS: invalid ND option\n");
907                 return;
908         }
909         if (ndopts.nd_opts_tgt_lladdr) {
910                 lladdr = ndisc_opt_addr_data(ndopts.nd_opts_tgt_lladdr, dev);
911                 if (!lladdr) {
912                         ND_PRINTK(2, warn,
913                                   "NA: invalid link-layer address length\n");
914                         return;
915                 }
916         }
917         ifp = ipv6_get_ifaddr(dev_net(dev), &msg->target, dev, 1);
918         if (ifp) {
919                 if (skb->pkt_type != PACKET_LOOPBACK
920                     && (ifp->flags & IFA_F_TENTATIVE)) {
921                                 addrconf_dad_failure(ifp);
922                                 return;
923                 }
924                 /* What should we make now? The advertisement
925                    is invalid, but ndisc specs say nothing
926                    about it. It could be misconfiguration, or
927                    an smart proxy agent tries to help us :-)
928
929                    We should not print the error if NA has been
930                    received from loopback - it is just our own
931                    unsolicited advertisement.
932                  */
933                 if (skb->pkt_type != PACKET_LOOPBACK)
934                         ND_PRINTK(1, warn,
935                                   "NA: someone advertises our address %pI6 on %s!\n",
936                                   &ifp->addr, ifp->idev->dev->name);
937                 in6_ifa_put(ifp);
938                 return;
939         }
940         neigh = neigh_lookup(&nd_tbl, &msg->target, dev);
941
942         if (neigh) {
943                 u8 old_flags = neigh->flags;
944                 struct net *net = dev_net(dev);
945
946                 if (neigh->nud_state & NUD_FAILED)
947                         goto out;
948
949                 /*
950                  * Don't update the neighbor cache entry on a proxy NA from
951                  * ourselves because either the proxied node is off link or it
952                  * has already sent a NA to us.
953                  */
954                 if (lladdr && !memcmp(lladdr, dev->dev_addr, dev->addr_len) &&
955                     net->ipv6.devconf_all->forwarding && net->ipv6.devconf_all->proxy_ndp &&
956                     pneigh_lookup(&nd_tbl, net, &msg->target, dev, 0)) {
957                         /* XXX: idev->cnf.proxy_ndp */
958                         goto out;
959                 }
960
961                 neigh_update(neigh, lladdr,
962                              msg->icmph.icmp6_solicited ? NUD_REACHABLE : NUD_STALE,
963                              NEIGH_UPDATE_F_WEAK_OVERRIDE|
964                              (msg->icmph.icmp6_override ? NEIGH_UPDATE_F_OVERRIDE : 0)|
965                              NEIGH_UPDATE_F_OVERRIDE_ISROUTER|
966                              (msg->icmph.icmp6_router ? NEIGH_UPDATE_F_ISROUTER : 0));
967
968                 if ((old_flags & ~neigh->flags) & NTF_ROUTER) {
969                         /*
970                          * Change: router to host
971                          */
972                         rt6_clean_tohost(dev_net(dev),  saddr);
973                 }
974
975 out:
976                 neigh_release(neigh);
977         }
978 }
979
980 static void ndisc_recv_rs(struct sk_buff *skb)
981 {
982         struct rs_msg *rs_msg = (struct rs_msg *)skb_transport_header(skb);
983         unsigned long ndoptlen = skb->len - sizeof(*rs_msg);
984         struct neighbour *neigh;
985         struct inet6_dev *idev;
986         const struct in6_addr *saddr = &ipv6_hdr(skb)->saddr;
987         struct ndisc_options ndopts;
988         u8 *lladdr = NULL;
989
990         if (skb->len < sizeof(*rs_msg))
991                 return;
992
993         idev = __in6_dev_get(skb->dev);
994         if (!idev) {
995                 ND_PRINTK(1, err, "RS: can't find in6 device\n");
996                 return;
997         }
998
999         /* Don't accept RS if we're not in router mode */
1000         if (!idev->cnf.forwarding)
1001                 goto out;
1002
1003         /*
1004          * Don't update NCE if src = ::;
1005          * this implies that the source node has no ip address assigned yet.
1006          */
1007         if (ipv6_addr_any(saddr))
1008                 goto out;
1009
1010         /* Parse ND options */
1011         if (!ndisc_parse_options(rs_msg->opt, ndoptlen, &ndopts)) {
1012                 ND_PRINTK(2, notice, "NS: invalid ND option, ignored\n");
1013                 goto out;
1014         }
1015
1016         if (ndopts.nd_opts_src_lladdr) {
1017                 lladdr = ndisc_opt_addr_data(ndopts.nd_opts_src_lladdr,
1018                                              skb->dev);
1019                 if (!lladdr)
1020                         goto out;
1021         }
1022
1023         neigh = __neigh_lookup(&nd_tbl, saddr, skb->dev, 1);
1024         if (neigh) {
1025                 neigh_update(neigh, lladdr, NUD_STALE,
1026                              NEIGH_UPDATE_F_WEAK_OVERRIDE|
1027                              NEIGH_UPDATE_F_OVERRIDE|
1028                              NEIGH_UPDATE_F_OVERRIDE_ISROUTER);
1029                 neigh_release(neigh);
1030         }
1031 out:
1032         return;
1033 }
1034
1035 static void ndisc_ra_useropt(struct sk_buff *ra, struct nd_opt_hdr *opt)
1036 {
1037         struct icmp6hdr *icmp6h = (struct icmp6hdr *)skb_transport_header(ra);
1038         struct sk_buff *skb;
1039         struct nlmsghdr *nlh;
1040         struct nduseroptmsg *ndmsg;
1041         struct net *net = dev_net(ra->dev);
1042         int err;
1043         int base_size = NLMSG_ALIGN(sizeof(struct nduseroptmsg)
1044                                     + (opt->nd_opt_len << 3));
1045         size_t msg_size = base_size + nla_total_size(sizeof(struct in6_addr));
1046
1047         skb = nlmsg_new(msg_size, GFP_ATOMIC);
1048         if (!skb) {
1049                 err = -ENOBUFS;
1050                 goto errout;
1051         }
1052
1053         nlh = nlmsg_put(skb, 0, 0, RTM_NEWNDUSEROPT, base_size, 0);
1054         if (!nlh) {
1055                 goto nla_put_failure;
1056         }
1057
1058         ndmsg = nlmsg_data(nlh);
1059         ndmsg->nduseropt_family = AF_INET6;
1060         ndmsg->nduseropt_ifindex = ra->dev->ifindex;
1061         ndmsg->nduseropt_icmp_type = icmp6h->icmp6_type;
1062         ndmsg->nduseropt_icmp_code = icmp6h->icmp6_code;
1063         ndmsg->nduseropt_opts_len = opt->nd_opt_len << 3;
1064
1065         memcpy(ndmsg + 1, opt, opt->nd_opt_len << 3);
1066
1067         if (nla_put_in6_addr(skb, NDUSEROPT_SRCADDR, &ipv6_hdr(ra)->saddr))
1068                 goto nla_put_failure;
1069         nlmsg_end(skb, nlh);
1070
1071         rtnl_notify(skb, net, 0, RTNLGRP_ND_USEROPT, NULL, GFP_ATOMIC);
1072         return;
1073
1074 nla_put_failure:
1075         nlmsg_free(skb);
1076         err = -EMSGSIZE;
1077 errout:
1078         rtnl_set_sk_err(net, RTNLGRP_ND_USEROPT, err);
1079 }
1080
1081 static void ndisc_router_discovery(struct sk_buff *skb)
1082 {
1083         struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb);
1084         struct neighbour *neigh = NULL;
1085         struct inet6_dev *in6_dev;
1086         struct rt6_info *rt = NULL;
1087         int lifetime;
1088         struct ndisc_options ndopts;
1089         int optlen;
1090         unsigned int pref = 0;
1091         __u32 old_if_flags;
1092         bool send_ifinfo_notify = false;
1093
1094         __u8 *opt = (__u8 *)(ra_msg + 1);
1095
1096         optlen = (skb_tail_pointer(skb) - skb_transport_header(skb)) -
1097                 sizeof(struct ra_msg);
1098
1099         ND_PRINTK(2, info,
1100                   "RA: %s, dev: %s\n",
1101                   __func__, skb->dev->name);
1102         if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) {
1103                 ND_PRINTK(2, warn, "RA: source address is not link-local\n");
1104                 return;
1105         }
1106         if (optlen < 0) {
1107                 ND_PRINTK(2, warn, "RA: packet too short\n");
1108                 return;
1109         }
1110
1111 #ifdef CONFIG_IPV6_NDISC_NODETYPE
1112         if (skb->ndisc_nodetype == NDISC_NODETYPE_HOST) {
1113                 ND_PRINTK(2, warn, "RA: from host or unauthorized router\n");
1114                 return;
1115         }
1116 #endif
1117
1118         /*
1119          *      set the RA_RECV flag in the interface
1120          */
1121
1122         in6_dev = __in6_dev_get(skb->dev);
1123         if (!in6_dev) {
1124                 ND_PRINTK(0, err, "RA: can't find inet6 device for %s\n",
1125                           skb->dev->name);
1126                 return;
1127         }
1128
1129         if (!ndisc_parse_options(opt, optlen, &ndopts)) {
1130                 ND_PRINTK(2, warn, "RA: invalid ND options\n");
1131                 return;
1132         }
1133
1134         if (!ipv6_accept_ra(in6_dev)) {
1135                 ND_PRINTK(2, info,
1136                           "RA: %s, did not accept ra for dev: %s\n",
1137                           __func__, skb->dev->name);
1138                 goto skip_linkparms;
1139         }
1140
1141 #ifdef CONFIG_IPV6_NDISC_NODETYPE
1142         /* skip link-specific parameters from interior routers */
1143         if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT) {
1144                 ND_PRINTK(2, info,
1145                           "RA: %s, nodetype is NODEFAULT, dev: %s\n",
1146                           __func__, skb->dev->name);
1147                 goto skip_linkparms;
1148         }
1149 #endif
1150
1151         if (in6_dev->if_flags & IF_RS_SENT) {
1152                 /*
1153                  *      flag that an RA was received after an RS was sent
1154                  *      out on this interface.
1155                  */
1156                 in6_dev->if_flags |= IF_RA_RCVD;
1157         }
1158
1159         /*
1160          * Remember the managed/otherconf flags from most recently
1161          * received RA message (RFC 2462) -- yoshfuji
1162          */
1163         old_if_flags = in6_dev->if_flags;
1164         in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED |
1165                                 IF_RA_OTHERCONF)) |
1166                                 (ra_msg->icmph.icmp6_addrconf_managed ?
1167                                         IF_RA_MANAGED : 0) |
1168                                 (ra_msg->icmph.icmp6_addrconf_other ?
1169                                         IF_RA_OTHERCONF : 0);
1170
1171         if (old_if_flags != in6_dev->if_flags)
1172                 send_ifinfo_notify = true;
1173
1174         if (!in6_dev->cnf.accept_ra_defrtr) {
1175                 ND_PRINTK(2, info,
1176                           "RA: %s, defrtr is false for dev: %s\n",
1177                           __func__, skb->dev->name);
1178                 goto skip_defrtr;
1179         }
1180
1181         /* Do not accept RA with source-addr found on local machine unless
1182          * accept_ra_from_local is set to true.
1183          */
1184         if (!in6_dev->cnf.accept_ra_from_local &&
1185             ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr,
1186                           in6_dev->dev, 0)) {
1187                 ND_PRINTK(2, info,
1188                           "RA from local address detected on dev: %s: default router ignored\n",
1189                           skb->dev->name);
1190                 goto skip_defrtr;
1191         }
1192
1193         lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime);
1194
1195 #ifdef CONFIG_IPV6_ROUTER_PREF
1196         pref = ra_msg->icmph.icmp6_router_pref;
1197         /* 10b is handled as if it were 00b (medium) */
1198         if (pref == ICMPV6_ROUTER_PREF_INVALID ||
1199             !in6_dev->cnf.accept_ra_rtr_pref)
1200                 pref = ICMPV6_ROUTER_PREF_MEDIUM;
1201 #endif
1202
1203         rt = rt6_get_dflt_router(&ipv6_hdr(skb)->saddr, skb->dev);
1204
1205         if (rt) {
1206                 neigh = dst_neigh_lookup(&rt->dst, &ipv6_hdr(skb)->saddr);
1207                 if (!neigh) {
1208                         ND_PRINTK(0, err,
1209                                   "RA: %s got default router without neighbour\n",
1210                                   __func__);
1211                         ip6_rt_put(rt);
1212                         return;
1213                 }
1214         }
1215         if (rt && lifetime == 0) {
1216                 ip6_del_rt(rt);
1217                 rt = NULL;
1218         }
1219
1220         ND_PRINTK(3, info, "RA: rt: %p  lifetime: %d, for dev: %s\n",
1221                   rt, lifetime, skb->dev->name);
1222         if (!rt && lifetime) {
1223                 ND_PRINTK(3, info, "RA: adding default router\n");
1224
1225                 rt = rt6_add_dflt_router(&ipv6_hdr(skb)->saddr, skb->dev, pref);
1226                 if (!rt) {
1227                         ND_PRINTK(0, err,
1228                                   "RA: %s failed to add default route\n",
1229                                   __func__);
1230                         return;
1231                 }
1232
1233                 neigh = dst_neigh_lookup(&rt->dst, &ipv6_hdr(skb)->saddr);
1234                 if (!neigh) {
1235                         ND_PRINTK(0, err,
1236                                   "RA: %s got default router without neighbour\n",
1237                                   __func__);
1238                         ip6_rt_put(rt);
1239                         return;
1240                 }
1241                 neigh->flags |= NTF_ROUTER;
1242         } else if (rt) {
1243                 rt->rt6i_flags = (rt->rt6i_flags & ~RTF_PREF_MASK) | RTF_PREF(pref);
1244         }
1245
1246         if (rt)
1247                 rt6_set_expires(rt, jiffies + (HZ * lifetime));
1248         if (in6_dev->cnf.accept_ra_min_hop_limit < 256 &&
1249             ra_msg->icmph.icmp6_hop_limit) {
1250                 if (in6_dev->cnf.accept_ra_min_hop_limit <= ra_msg->icmph.icmp6_hop_limit) {
1251                         in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit;
1252                         if (rt)
1253                                 dst_metric_set(&rt->dst, RTAX_HOPLIMIT,
1254                                                ra_msg->icmph.icmp6_hop_limit);
1255                 } else {
1256                         ND_PRINTK(2, warn, "RA: Got route advertisement with lower hop_limit than minimum\n");
1257                 }
1258         }
1259
1260 skip_defrtr:
1261
1262         /*
1263          *      Update Reachable Time and Retrans Timer
1264          */
1265
1266         if (in6_dev->nd_parms) {
1267                 unsigned long rtime = ntohl(ra_msg->retrans_timer);
1268
1269                 if (rtime && rtime/1000 < MAX_SCHEDULE_TIMEOUT/HZ) {
1270                         rtime = (rtime*HZ)/1000;
1271                         if (rtime < HZ/10)
1272                                 rtime = HZ/10;
1273                         NEIGH_VAR_SET(in6_dev->nd_parms, RETRANS_TIME, rtime);
1274                         in6_dev->tstamp = jiffies;
1275                         send_ifinfo_notify = true;
1276                 }
1277
1278                 rtime = ntohl(ra_msg->reachable_time);
1279                 if (rtime && rtime/1000 < MAX_SCHEDULE_TIMEOUT/(3*HZ)) {
1280                         rtime = (rtime*HZ)/1000;
1281
1282                         if (rtime < HZ/10)
1283                                 rtime = HZ/10;
1284
1285                         if (rtime != NEIGH_VAR(in6_dev->nd_parms, BASE_REACHABLE_TIME)) {
1286                                 NEIGH_VAR_SET(in6_dev->nd_parms,
1287                                               BASE_REACHABLE_TIME, rtime);
1288                                 NEIGH_VAR_SET(in6_dev->nd_parms,
1289                                               GC_STALETIME, 3 * rtime);
1290                                 in6_dev->nd_parms->reachable_time = neigh_rand_reach_time(rtime);
1291                                 in6_dev->tstamp = jiffies;
1292                                 send_ifinfo_notify = true;
1293                         }
1294                 }
1295         }
1296
1297         /*
1298          *      Send a notify if RA changed managed/otherconf flags or timer settings
1299          */
1300         if (send_ifinfo_notify)
1301                 inet6_ifinfo_notify(RTM_NEWLINK, in6_dev);
1302
1303 skip_linkparms:
1304
1305         /*
1306          *      Process options.
1307          */
1308
1309         if (!neigh)
1310                 neigh = __neigh_lookup(&nd_tbl, &ipv6_hdr(skb)->saddr,
1311                                        skb->dev, 1);
1312         if (neigh) {
1313                 u8 *lladdr = NULL;
1314                 if (ndopts.nd_opts_src_lladdr) {
1315                         lladdr = ndisc_opt_addr_data(ndopts.nd_opts_src_lladdr,
1316                                                      skb->dev);
1317                         if (!lladdr) {
1318                                 ND_PRINTK(2, warn,
1319                                           "RA: invalid link-layer address length\n");
1320                                 goto out;
1321                         }
1322                 }
1323                 neigh_update(neigh, lladdr, NUD_STALE,
1324                              NEIGH_UPDATE_F_WEAK_OVERRIDE|
1325                              NEIGH_UPDATE_F_OVERRIDE|
1326                              NEIGH_UPDATE_F_OVERRIDE_ISROUTER|
1327                              NEIGH_UPDATE_F_ISROUTER);
1328         }
1329
1330         if (!ipv6_accept_ra(in6_dev)) {
1331                 ND_PRINTK(2, info,
1332                           "RA: %s, accept_ra is false for dev: %s\n",
1333                           __func__, skb->dev->name);
1334                 goto out;
1335         }
1336
1337 #ifdef CONFIG_IPV6_ROUTE_INFO
1338         if (!in6_dev->cnf.accept_ra_from_local &&
1339             ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr,
1340                           in6_dev->dev, 0)) {
1341                 ND_PRINTK(2, info,
1342                           "RA from local address detected on dev: %s: router info ignored.\n",
1343                           skb->dev->name);
1344                 goto skip_routeinfo;
1345         }
1346
1347         if (in6_dev->cnf.accept_ra_rtr_pref && ndopts.nd_opts_ri) {
1348                 struct nd_opt_hdr *p;
1349                 for (p = ndopts.nd_opts_ri;
1350                      p;
1351                      p = ndisc_next_option(p, ndopts.nd_opts_ri_end)) {
1352                         struct route_info *ri = (struct route_info *)p;
1353 #ifdef CONFIG_IPV6_NDISC_NODETYPE
1354                         if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT &&
1355                             ri->prefix_len == 0)
1356                                 continue;
1357 #endif
1358                         if (ri->prefix_len == 0 &&
1359                             !in6_dev->cnf.accept_ra_defrtr)
1360                                 continue;
1361                         if (ri->prefix_len > in6_dev->cnf.accept_ra_rt_info_max_plen)
1362                                 continue;
1363                         rt6_route_rcv(skb->dev, (u8 *)p, (p->nd_opt_len) << 3,
1364                                       &ipv6_hdr(skb)->saddr);
1365                 }
1366         }
1367
1368 skip_routeinfo:
1369 #endif
1370
1371 #ifdef CONFIG_IPV6_NDISC_NODETYPE
1372         /* skip link-specific ndopts from interior routers */
1373         if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT) {
1374                 ND_PRINTK(2, info,
1375                           "RA: %s, nodetype is NODEFAULT (interior routes), dev: %s\n",
1376                           __func__, skb->dev->name);
1377                 goto out;
1378         }
1379 #endif
1380
1381         if (in6_dev->cnf.accept_ra_pinfo && ndopts.nd_opts_pi) {
1382                 struct nd_opt_hdr *p;
1383                 for (p = ndopts.nd_opts_pi;
1384                      p;
1385                      p = ndisc_next_option(p, ndopts.nd_opts_pi_end)) {
1386                         addrconf_prefix_rcv(skb->dev, (u8 *)p,
1387                                             (p->nd_opt_len) << 3,
1388                                             ndopts.nd_opts_src_lladdr != NULL);
1389                 }
1390         }
1391
1392         if (ndopts.nd_opts_mtu && in6_dev->cnf.accept_ra_mtu) {
1393                 __be32 n;
1394                 u32 mtu;
1395
1396                 memcpy(&n, ((u8 *)(ndopts.nd_opts_mtu+1))+2, sizeof(mtu));
1397                 mtu = ntohl(n);
1398
1399                 if (mtu < IPV6_MIN_MTU || mtu > skb->dev->mtu) {
1400                         ND_PRINTK(2, warn, "RA: invalid mtu: %d\n", mtu);
1401                 } else if (in6_dev->cnf.mtu6 != mtu) {
1402                         in6_dev->cnf.mtu6 = mtu;
1403
1404                         if (rt)
1405                                 dst_metric_set(&rt->dst, RTAX_MTU, mtu);
1406
1407                         rt6_mtu_change(skb->dev, mtu);
1408                 }
1409         }
1410
1411         if (ndopts.nd_useropts) {
1412                 struct nd_opt_hdr *p;
1413                 for (p = ndopts.nd_useropts;
1414                      p;
1415                      p = ndisc_next_useropt(p, ndopts.nd_useropts_end)) {
1416                         ndisc_ra_useropt(skb, p);
1417                 }
1418         }
1419
1420         if (ndopts.nd_opts_tgt_lladdr || ndopts.nd_opts_rh) {
1421                 ND_PRINTK(2, warn, "RA: invalid RA options\n");
1422         }
1423 out:
1424         ip6_rt_put(rt);
1425         if (neigh)
1426                 neigh_release(neigh);
1427 }
1428
1429 static void ndisc_redirect_rcv(struct sk_buff *skb)
1430 {
1431         u8 *hdr;
1432         struct ndisc_options ndopts;
1433         struct rd_msg *msg = (struct rd_msg *)skb_transport_header(skb);
1434         u32 ndoptlen = skb_tail_pointer(skb) - (skb_transport_header(skb) +
1435                                     offsetof(struct rd_msg, opt));
1436
1437 #ifdef CONFIG_IPV6_NDISC_NODETYPE
1438         switch (skb->ndisc_nodetype) {
1439         case NDISC_NODETYPE_HOST:
1440         case NDISC_NODETYPE_NODEFAULT:
1441                 ND_PRINTK(2, warn,
1442                           "Redirect: from host or unauthorized router\n");
1443                 return;
1444         }
1445 #endif
1446
1447         if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) {
1448                 ND_PRINTK(2, warn,
1449                           "Redirect: source address is not link-local\n");
1450                 return;
1451         }
1452
1453         if (!ndisc_parse_options(msg->opt, ndoptlen, &ndopts))
1454                 return;
1455
1456         if (!ndopts.nd_opts_rh) {
1457                 ip6_redirect_no_header(skb, dev_net(skb->dev),
1458                                         skb->dev->ifindex, 0);
1459                 return;
1460         }
1461
1462         hdr = (u8 *)ndopts.nd_opts_rh;
1463         hdr += 8;
1464         if (!pskb_pull(skb, hdr - skb_transport_header(skb)))
1465                 return;
1466
1467         icmpv6_notify(skb, NDISC_REDIRECT, 0, 0);
1468 }
1469
1470 static void ndisc_fill_redirect_hdr_option(struct sk_buff *skb,
1471                                            struct sk_buff *orig_skb,
1472                                            int rd_len)
1473 {
1474         u8 *opt = skb_put(skb, rd_len);
1475
1476         memset(opt, 0, 8);
1477         *(opt++) = ND_OPT_REDIRECT_HDR;
1478         *(opt++) = (rd_len >> 3);
1479         opt += 6;
1480
1481         memcpy(opt, ipv6_hdr(orig_skb), rd_len - 8);
1482 }
1483
1484 void ndisc_send_redirect(struct sk_buff *skb, const struct in6_addr *target)
1485 {
1486         struct net_device *dev = skb->dev;
1487         struct net *net = dev_net(dev);
1488         struct sock *sk = net->ipv6.ndisc_sk;
1489         int optlen = 0;
1490         struct inet_peer *peer;
1491         struct sk_buff *buff;
1492         struct rd_msg *msg;
1493         struct in6_addr saddr_buf;
1494         struct rt6_info *rt;
1495         struct dst_entry *dst;
1496         struct flowi6 fl6;
1497         int rd_len;
1498         u8 ha_buf[MAX_ADDR_LEN], *ha = NULL;
1499         int oif = l3mdev_fib_oif(dev);
1500         bool ret;
1501
1502         if (ipv6_get_lladdr(dev, &saddr_buf, IFA_F_TENTATIVE)) {
1503                 ND_PRINTK(2, warn, "Redirect: no link-local address on %s\n",
1504                           dev->name);
1505                 return;
1506         }
1507
1508         if (!ipv6_addr_equal(&ipv6_hdr(skb)->daddr, target) &&
1509             ipv6_addr_type(target) != (IPV6_ADDR_UNICAST|IPV6_ADDR_LINKLOCAL)) {
1510                 ND_PRINTK(2, warn,
1511                           "Redirect: target address is not link-local unicast\n");
1512                 return;
1513         }
1514
1515         icmpv6_flow_init(sk, &fl6, NDISC_REDIRECT,
1516                          &saddr_buf, &ipv6_hdr(skb)->saddr, oif);
1517
1518         if (oif != skb->dev->ifindex)
1519                 fl6.flowi6_flags |= FLOWI_FLAG_L3MDEV_SRC;
1520
1521         dst = ip6_route_output(net, NULL, &fl6);
1522         if (dst->error) {
1523                 dst_release(dst);
1524                 return;
1525         }
1526         dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), NULL, 0);
1527         if (IS_ERR(dst))
1528                 return;
1529
1530         rt = (struct rt6_info *) dst;
1531
1532         if (rt->rt6i_flags & RTF_GATEWAY) {
1533                 ND_PRINTK(2, warn,
1534                           "Redirect: destination is not a neighbour\n");
1535                 goto release;
1536         }
1537         peer = inet_getpeer_v6(net->ipv6.peers, &ipv6_hdr(skb)->saddr, 1);
1538         ret = inet_peer_xrlim_allow(peer, 1*HZ);
1539         if (peer)
1540                 inet_putpeer(peer);
1541         if (!ret)
1542                 goto release;
1543
1544         if (dev->addr_len) {
1545                 struct neighbour *neigh = dst_neigh_lookup(skb_dst(skb), target);
1546                 if (!neigh) {
1547                         ND_PRINTK(2, warn,
1548                                   "Redirect: no neigh for target address\n");
1549                         goto release;
1550                 }
1551
1552                 read_lock_bh(&neigh->lock);
1553                 if (neigh->nud_state & NUD_VALID) {
1554                         memcpy(ha_buf, neigh->ha, dev->addr_len);
1555                         read_unlock_bh(&neigh->lock);
1556                         ha = ha_buf;
1557                         optlen += ndisc_opt_addr_space(dev);
1558                 } else
1559                         read_unlock_bh(&neigh->lock);
1560
1561                 neigh_release(neigh);
1562         }
1563
1564         rd_len = min_t(unsigned int,
1565                        IPV6_MIN_MTU - sizeof(struct ipv6hdr) - sizeof(*msg) - optlen,
1566                        skb->len + 8);
1567         rd_len &= ~0x7;
1568         optlen += rd_len;
1569
1570         buff = ndisc_alloc_skb(dev, sizeof(*msg) + optlen);
1571         if (!buff)
1572                 goto release;
1573
1574         msg = (struct rd_msg *)skb_put(buff, sizeof(*msg));
1575         *msg = (struct rd_msg) {
1576                 .icmph = {
1577                         .icmp6_type = NDISC_REDIRECT,
1578                 },
1579                 .target = *target,
1580                 .dest = ipv6_hdr(skb)->daddr,
1581         };
1582
1583         /*
1584          *      include target_address option
1585          */
1586
1587         if (ha)
1588                 ndisc_fill_addr_option(buff, ND_OPT_TARGET_LL_ADDR, ha);
1589
1590         /*
1591          *      build redirect option and copy skb over to the new packet.
1592          */
1593
1594         if (rd_len)
1595                 ndisc_fill_redirect_hdr_option(buff, skb, rd_len);
1596
1597         skb_dst_set(buff, dst);
1598         ndisc_send_skb(buff, &ipv6_hdr(skb)->saddr, &saddr_buf);
1599         return;
1600
1601 release:
1602         dst_release(dst);
1603 }
1604
1605 static void pndisc_redo(struct sk_buff *skb)
1606 {
1607         ndisc_recv_ns(skb);
1608         kfree_skb(skb);
1609 }
1610
1611 static bool ndisc_suppress_frag_ndisc(struct sk_buff *skb)
1612 {
1613         struct inet6_dev *idev = __in6_dev_get(skb->dev);
1614
1615         if (!idev)
1616                 return true;
1617         if (IP6CB(skb)->flags & IP6SKB_FRAGMENTED &&
1618             idev->cnf.suppress_frag_ndisc) {
1619                 net_warn_ratelimited("Received fragmented ndisc packet. Carefully consider disabling suppress_frag_ndisc.\n");
1620                 return true;
1621         }
1622         return false;
1623 }
1624
1625 int ndisc_rcv(struct sk_buff *skb)
1626 {
1627         struct nd_msg *msg;
1628
1629         if (ndisc_suppress_frag_ndisc(skb))
1630                 return 0;
1631
1632         if (skb_linearize(skb))
1633                 return 0;
1634
1635         msg = (struct nd_msg *)skb_transport_header(skb);
1636
1637         __skb_push(skb, skb->data - skb_transport_header(skb));
1638
1639         if (ipv6_hdr(skb)->hop_limit != 255) {
1640                 ND_PRINTK(2, warn, "NDISC: invalid hop-limit: %d\n",
1641                           ipv6_hdr(skb)->hop_limit);
1642                 return 0;
1643         }
1644
1645         if (msg->icmph.icmp6_code != 0) {
1646                 ND_PRINTK(2, warn, "NDISC: invalid ICMPv6 code: %d\n",
1647                           msg->icmph.icmp6_code);
1648                 return 0;
1649         }
1650
1651         memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
1652
1653         switch (msg->icmph.icmp6_type) {
1654         case NDISC_NEIGHBOUR_SOLICITATION:
1655                 ndisc_recv_ns(skb);
1656                 break;
1657
1658         case NDISC_NEIGHBOUR_ADVERTISEMENT:
1659                 ndisc_recv_na(skb);
1660                 break;
1661
1662         case NDISC_ROUTER_SOLICITATION:
1663                 ndisc_recv_rs(skb);
1664                 break;
1665
1666         case NDISC_ROUTER_ADVERTISEMENT:
1667                 ndisc_router_discovery(skb);
1668                 break;
1669
1670         case NDISC_REDIRECT:
1671                 ndisc_redirect_rcv(skb);
1672                 break;
1673         }
1674
1675         return 0;
1676 }
1677
1678 static int ndisc_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
1679 {
1680         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1681         struct netdev_notifier_change_info *change_info;
1682         struct net *net = dev_net(dev);
1683         struct inet6_dev *idev;
1684
1685         switch (event) {
1686         case NETDEV_CHANGEADDR:
1687                 neigh_changeaddr(&nd_tbl, dev);
1688                 fib6_run_gc(0, net, false);
1689                 idev = in6_dev_get(dev);
1690                 if (!idev)
1691                         break;
1692                 if (idev->cnf.ndisc_notify)
1693                         ndisc_send_unsol_na(dev);
1694                 in6_dev_put(idev);
1695                 break;
1696         case NETDEV_CHANGE:
1697                 change_info = ptr;
1698                 if (change_info->flags_changed & IFF_NOARP)
1699                         neigh_changeaddr(&nd_tbl, dev);
1700                 break;
1701         case NETDEV_DOWN:
1702                 neigh_ifdown(&nd_tbl, dev);
1703                 fib6_run_gc(0, net, false);
1704                 break;
1705         case NETDEV_NOTIFY_PEERS:
1706                 ndisc_send_unsol_na(dev);
1707                 break;
1708         default:
1709                 break;
1710         }
1711
1712         return NOTIFY_DONE;
1713 }
1714
1715 static struct notifier_block ndisc_netdev_notifier = {
1716         .notifier_call = ndisc_netdev_event,
1717 };
1718
1719 #ifdef CONFIG_SYSCTL
1720 static void ndisc_warn_deprecated_sysctl(struct ctl_table *ctl,
1721                                          const char *func, const char *dev_name)
1722 {
1723         static char warncomm[TASK_COMM_LEN];
1724         static int warned;
1725         if (strcmp(warncomm, current->comm) && warned < 5) {
1726                 strcpy(warncomm, current->comm);
1727                 pr_warn("process `%s' is using deprecated sysctl (%s) net.ipv6.neigh.%s.%s - use net.ipv6.neigh.%s.%s_ms instead\n",
1728                         warncomm, func,
1729                         dev_name, ctl->procname,
1730                         dev_name, ctl->procname);
1731                 warned++;
1732         }
1733 }
1734
1735 int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write, void __user *buffer, size_t *lenp, loff_t *ppos)
1736 {
1737         struct net_device *dev = ctl->extra1;
1738         struct inet6_dev *idev;
1739         int ret;
1740
1741         if ((strcmp(ctl->procname, "retrans_time") == 0) ||
1742             (strcmp(ctl->procname, "base_reachable_time") == 0))
1743                 ndisc_warn_deprecated_sysctl(ctl, "syscall", dev ? dev->name : "default");
1744
1745         if (strcmp(ctl->procname, "retrans_time") == 0)
1746                 ret = neigh_proc_dointvec(ctl, write, buffer, lenp, ppos);
1747
1748         else if (strcmp(ctl->procname, "base_reachable_time") == 0)
1749                 ret = neigh_proc_dointvec_jiffies(ctl, write,
1750                                                   buffer, lenp, ppos);
1751
1752         else if ((strcmp(ctl->procname, "retrans_time_ms") == 0) ||
1753                  (strcmp(ctl->procname, "base_reachable_time_ms") == 0))
1754                 ret = neigh_proc_dointvec_ms_jiffies(ctl, write,
1755                                                      buffer, lenp, ppos);
1756         else
1757                 ret = -1;
1758
1759         if (write && ret == 0 && dev && (idev = in6_dev_get(dev)) != NULL) {
1760                 if (ctl->data == &NEIGH_VAR(idev->nd_parms, BASE_REACHABLE_TIME))
1761                         idev->nd_parms->reachable_time =
1762                                         neigh_rand_reach_time(NEIGH_VAR(idev->nd_parms, BASE_REACHABLE_TIME));
1763                 idev->tstamp = jiffies;
1764                 inet6_ifinfo_notify(RTM_NEWLINK, idev);
1765                 in6_dev_put(idev);
1766         }
1767         return ret;
1768 }
1769
1770
1771 #endif
1772
1773 static int __net_init ndisc_net_init(struct net *net)
1774 {
1775         struct ipv6_pinfo *np;
1776         struct sock *sk;
1777         int err;
1778
1779         err = inet_ctl_sock_create(&sk, PF_INET6,
1780                                    SOCK_RAW, IPPROTO_ICMPV6, net);
1781         if (err < 0) {
1782                 ND_PRINTK(0, err,
1783                           "NDISC: Failed to initialize the control socket (err %d)\n",
1784                           err);
1785                 return err;
1786         }
1787
1788         net->ipv6.ndisc_sk = sk;
1789
1790         np = inet6_sk(sk);
1791         np->hop_limit = 255;
1792         /* Do not loopback ndisc messages */
1793         np->mc_loop = 0;
1794
1795         return 0;
1796 }
1797
1798 static void __net_exit ndisc_net_exit(struct net *net)
1799 {
1800         inet_ctl_sock_destroy(net->ipv6.ndisc_sk);
1801 }
1802
1803 static struct pernet_operations ndisc_net_ops = {
1804         .init = ndisc_net_init,
1805         .exit = ndisc_net_exit,
1806 };
1807
1808 int __init ndisc_init(void)
1809 {
1810         int err;
1811
1812         err = register_pernet_subsys(&ndisc_net_ops);
1813         if (err)
1814                 return err;
1815         /*
1816          * Initialize the neighbour table
1817          */
1818         neigh_table_init(NEIGH_ND_TABLE, &nd_tbl);
1819
1820 #ifdef CONFIG_SYSCTL
1821         err = neigh_sysctl_register(NULL, &nd_tbl.parms,
1822                                     ndisc_ifinfo_sysctl_change);
1823         if (err)
1824                 goto out_unregister_pernet;
1825 out:
1826 #endif
1827         return err;
1828
1829 #ifdef CONFIG_SYSCTL
1830 out_unregister_pernet:
1831         unregister_pernet_subsys(&ndisc_net_ops);
1832         goto out;
1833 #endif
1834 }
1835
1836 int __init ndisc_late_init(void)
1837 {
1838         return register_netdevice_notifier(&ndisc_netdev_notifier);
1839 }
1840
1841 void ndisc_late_cleanup(void)
1842 {
1843         unregister_netdevice_notifier(&ndisc_netdev_notifier);
1844 }
1845
1846 void ndisc_cleanup(void)
1847 {
1848 #ifdef CONFIG_SYSCTL
1849         neigh_sysctl_unregister(&nd_tbl.parms);
1850 #endif
1851         neigh_table_clear(NEIGH_ND_TABLE, &nd_tbl);
1852         unregister_pernet_subsys(&ndisc_net_ops);
1853 }