2 * NET3 IP device support routines.
4 * Version: $Id: devinet.c,v 1.44 2001/10/31 21:55:54 davem Exp $
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
11 * Derived from the IP parts of dev.c 1.0.19
13 * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
14 * Mark Evans, <evansmp@uhura.aston.ac.uk>
17 * Alan Cox, <gw4pts@gw4pts.ampr.org>
18 * Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
21 * Alexey Kuznetsov: pa_* fields are replaced with ifaddr
23 * Cyrus Durgin: updated for kmod
24 * Matthias Andree: in devinet_ioctl, compare label and
25 * address (4.4BSD alias style support),
26 * fall back to comparing just the label
31 #include <asm/uaccess.h>
32 #include <asm/system.h>
33 #include <linux/bitops.h>
34 #include <linux/capability.h>
35 #include <linux/module.h>
36 #include <linux/types.h>
37 #include <linux/kernel.h>
38 #include <linux/sched.h>
39 #include <linux/string.h>
41 #include <linux/socket.h>
42 #include <linux/sockios.h>
44 #include <linux/errno.h>
45 #include <linux/interrupt.h>
46 #include <linux/if_ether.h>
47 #include <linux/inet.h>
48 #include <linux/netdevice.h>
49 #include <linux/etherdevice.h>
50 #include <linux/skbuff.h>
51 #include <linux/rtnetlink.h>
52 #include <linux/init.h>
53 #include <linux/notifier.h>
54 #include <linux/inetdevice.h>
55 #include <linux/igmp.h>
57 #include <linux/sysctl.h>
59 #include <linux/kmod.h>
63 #include <net/route.h>
64 #include <net/ip_fib.h>
65 #include <net/netlink.h>
67 struct ipv4_devconf ipv4_devconf = {
68 .accept_redirects = 1,
70 .secure_redirects = 1,
74 static struct ipv4_devconf ipv4_devconf_dflt = {
75 .accept_redirects = 1,
77 .secure_redirects = 1,
79 .accept_source_route = 1,
82 static struct nla_policy ifa_ipv4_policy[IFA_MAX+1] __read_mostly = {
83 [IFA_LOCAL] = { .type = NLA_U32 },
84 [IFA_ADDRESS] = { .type = NLA_U32 },
85 [IFA_BROADCAST] = { .type = NLA_U32 },
86 [IFA_ANYCAST] = { .type = NLA_U32 },
87 [IFA_LABEL] = { .type = NLA_STRING },
90 static void rtmsg_ifa(int event, struct in_ifaddr *);
92 static BLOCKING_NOTIFIER_HEAD(inetaddr_chain);
93 static void inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
96 static void devinet_sysctl_register(struct in_device *in_dev,
97 struct ipv4_devconf *p);
98 static void devinet_sysctl_unregister(struct ipv4_devconf *p);
101 /* Locks all the inet devices. */
103 static struct in_ifaddr *inet_alloc_ifa(void)
105 struct in_ifaddr *ifa = kzalloc(sizeof(*ifa), GFP_KERNEL);
108 INIT_RCU_HEAD(&ifa->rcu_head);
114 static void inet_rcu_free_ifa(struct rcu_head *head)
116 struct in_ifaddr *ifa = container_of(head, struct in_ifaddr, rcu_head);
118 in_dev_put(ifa->ifa_dev);
122 static inline void inet_free_ifa(struct in_ifaddr *ifa)
124 call_rcu(&ifa->rcu_head, inet_rcu_free_ifa);
127 void in_dev_finish_destroy(struct in_device *idev)
129 struct net_device *dev = idev->dev;
131 BUG_TRAP(!idev->ifa_list);
132 BUG_TRAP(!idev->mc_list);
133 #ifdef NET_REFCNT_DEBUG
134 printk(KERN_DEBUG "in_dev_finish_destroy: %p=%s\n",
135 idev, dev ? dev->name : "NIL");
139 printk("Freeing alive in_device %p\n", idev);
145 struct in_device *inetdev_init(struct net_device *dev)
147 struct in_device *in_dev;
151 in_dev = kzalloc(sizeof(*in_dev), GFP_KERNEL);
154 INIT_RCU_HEAD(&in_dev->rcu_head);
155 memcpy(&in_dev->cnf, &ipv4_devconf_dflt, sizeof(in_dev->cnf));
156 in_dev->cnf.sysctl = NULL;
158 if ((in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl)) == NULL)
160 /* Reference in_dev->dev */
163 neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4,
164 NET_IPV4_NEIGH, "ipv4", NULL, NULL);
167 /* Account for reference dev->ip_ptr */
169 rcu_assign_pointer(dev->ip_ptr, in_dev);
172 devinet_sysctl_register(in_dev, &in_dev->cnf);
174 ip_mc_init_dev(in_dev);
175 if (dev->flags & IFF_UP)
185 static void in_dev_rcu_put(struct rcu_head *head)
187 struct in_device *idev = container_of(head, struct in_device, rcu_head);
191 static void inetdev_destroy(struct in_device *in_dev)
193 struct in_ifaddr *ifa;
194 struct net_device *dev;
199 if (dev == &loopback_dev)
204 ip_mc_destroy_dev(in_dev);
206 while ((ifa = in_dev->ifa_list) != NULL) {
207 inet_del_ifa(in_dev, &in_dev->ifa_list, 0);
212 devinet_sysctl_unregister(&in_dev->cnf);
218 neigh_sysctl_unregister(in_dev->arp_parms);
220 neigh_parms_release(&arp_tbl, in_dev->arp_parms);
223 call_rcu(&in_dev->rcu_head, in_dev_rcu_put);
226 int inet_addr_onlink(struct in_device *in_dev, u32 a, u32 b)
229 for_primary_ifa(in_dev) {
230 if (inet_ifa_match(a, ifa)) {
231 if (!b || inet_ifa_match(b, ifa)) {
236 } endfor_ifa(in_dev);
241 static void inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
244 struct in_ifaddr *promote = NULL;
245 struct in_ifaddr *ifa, *ifa1 = *ifap;
246 struct in_ifaddr *last_prim = in_dev->ifa_list;
247 struct in_ifaddr *prev_prom = NULL;
248 int do_promote = IN_DEV_PROMOTE_SECONDARIES(in_dev);
252 /* 1. Deleting primary ifaddr forces deletion all secondaries
253 * unless alias promotion is set
256 if (!(ifa1->ifa_flags & IFA_F_SECONDARY)) {
257 struct in_ifaddr **ifap1 = &ifa1->ifa_next;
259 while ((ifa = *ifap1) != NULL) {
260 if (!(ifa->ifa_flags & IFA_F_SECONDARY) &&
261 ifa1->ifa_scope <= ifa->ifa_scope)
264 if (!(ifa->ifa_flags & IFA_F_SECONDARY) ||
265 ifa1->ifa_mask != ifa->ifa_mask ||
266 !inet_ifa_match(ifa1->ifa_address, ifa)) {
267 ifap1 = &ifa->ifa_next;
273 *ifap1 = ifa->ifa_next;
275 rtmsg_ifa(RTM_DELADDR, ifa);
276 blocking_notifier_call_chain(&inetaddr_chain,
288 *ifap = ifa1->ifa_next;
290 /* 3. Announce address deletion */
292 /* Send message first, then call notifier.
293 At first sight, FIB update triggered by notifier
294 will refer to already deleted ifaddr, that could confuse
295 netlink listeners. It is not true: look, gated sees
296 that route deleted and if it still thinks that ifaddr
297 is valid, it will try to restore deleted routes... Grr.
298 So that, this order is correct.
300 rtmsg_ifa(RTM_DELADDR, ifa1);
301 blocking_notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa1);
306 prev_prom->ifa_next = promote->ifa_next;
307 promote->ifa_next = last_prim->ifa_next;
308 last_prim->ifa_next = promote;
311 promote->ifa_flags &= ~IFA_F_SECONDARY;
312 rtmsg_ifa(RTM_NEWADDR, promote);
313 blocking_notifier_call_chain(&inetaddr_chain,
315 for (ifa = promote->ifa_next; ifa; ifa = ifa->ifa_next) {
316 if (ifa1->ifa_mask != ifa->ifa_mask ||
317 !inet_ifa_match(ifa1->ifa_address, ifa))
326 if (!in_dev->ifa_list)
327 inetdev_destroy(in_dev);
331 static int inet_insert_ifa(struct in_ifaddr *ifa)
333 struct in_device *in_dev = ifa->ifa_dev;
334 struct in_ifaddr *ifa1, **ifap, **last_primary;
338 if (!ifa->ifa_local) {
343 ifa->ifa_flags &= ~IFA_F_SECONDARY;
344 last_primary = &in_dev->ifa_list;
346 for (ifap = &in_dev->ifa_list; (ifa1 = *ifap) != NULL;
347 ifap = &ifa1->ifa_next) {
348 if (!(ifa1->ifa_flags & IFA_F_SECONDARY) &&
349 ifa->ifa_scope <= ifa1->ifa_scope)
350 last_primary = &ifa1->ifa_next;
351 if (ifa1->ifa_mask == ifa->ifa_mask &&
352 inet_ifa_match(ifa1->ifa_address, ifa)) {
353 if (ifa1->ifa_local == ifa->ifa_local) {
357 if (ifa1->ifa_scope != ifa->ifa_scope) {
361 ifa->ifa_flags |= IFA_F_SECONDARY;
365 if (!(ifa->ifa_flags & IFA_F_SECONDARY)) {
366 net_srandom(ifa->ifa_local);
370 ifa->ifa_next = *ifap;
373 /* Send message first, then call notifier.
374 Notifier will trigger FIB update, so that
375 listeners of netlink will know about new ifaddr */
376 rtmsg_ifa(RTM_NEWADDR, ifa);
377 blocking_notifier_call_chain(&inetaddr_chain, NETDEV_UP, ifa);
382 static int inet_set_ifa(struct net_device *dev, struct in_ifaddr *ifa)
384 struct in_device *in_dev = __in_dev_get_rtnl(dev);
389 in_dev = inetdev_init(dev);
395 if (ifa->ifa_dev != in_dev) {
396 BUG_TRAP(!ifa->ifa_dev);
398 ifa->ifa_dev = in_dev;
400 if (LOOPBACK(ifa->ifa_local))
401 ifa->ifa_scope = RT_SCOPE_HOST;
402 return inet_insert_ifa(ifa);
405 struct in_device *inetdev_by_index(int ifindex)
407 struct net_device *dev;
408 struct in_device *in_dev = NULL;
409 read_lock(&dev_base_lock);
410 dev = __dev_get_by_index(ifindex);
412 in_dev = in_dev_get(dev);
413 read_unlock(&dev_base_lock);
417 /* Called only from RTNL semaphored context. No locks. */
419 struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, u32 prefix,
424 for_primary_ifa(in_dev) {
425 if (ifa->ifa_mask == mask && inet_ifa_match(prefix, ifa))
427 } endfor_ifa(in_dev);
431 static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
433 struct rtattr **rta = arg;
434 struct in_device *in_dev;
435 struct ifaddrmsg *ifm = NLMSG_DATA(nlh);
436 struct in_ifaddr *ifa, **ifap;
440 if ((in_dev = inetdev_by_index(ifm->ifa_index)) == NULL)
442 __in_dev_put(in_dev);
444 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
445 ifap = &ifa->ifa_next) {
446 if ((rta[IFA_LOCAL - 1] &&
447 memcmp(RTA_DATA(rta[IFA_LOCAL - 1]),
448 &ifa->ifa_local, 4)) ||
449 (rta[IFA_LABEL - 1] &&
450 rtattr_strcmp(rta[IFA_LABEL - 1], ifa->ifa_label)) ||
451 (rta[IFA_ADDRESS - 1] &&
452 (ifm->ifa_prefixlen != ifa->ifa_prefixlen ||
453 !inet_ifa_match(*(u32*)RTA_DATA(rta[IFA_ADDRESS - 1]),
456 inet_del_ifa(in_dev, ifap, 1);
460 return -EADDRNOTAVAIL;
463 static struct in_ifaddr *rtm_to_ifaddr(struct nlmsghdr *nlh)
465 struct nlattr *tb[IFA_MAX+1];
466 struct in_ifaddr *ifa;
467 struct ifaddrmsg *ifm;
468 struct net_device *dev;
469 struct in_device *in_dev;
472 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy);
476 ifm = nlmsg_data(nlh);
477 if (ifm->ifa_prefixlen > 32 || tb[IFA_LOCAL] == NULL)
480 dev = __dev_get_by_index(ifm->ifa_index);
486 in_dev = __in_dev_get_rtnl(dev);
487 if (in_dev == NULL) {
488 in_dev = inetdev_init(dev);
489 if (in_dev == NULL) {
495 ifa = inet_alloc_ifa();
498 * A potential indev allocation can be left alive, it stays
499 * assigned to its device and is destroy with it.
507 if (tb[IFA_ADDRESS] == NULL)
508 tb[IFA_ADDRESS] = tb[IFA_LOCAL];
510 ifa->ifa_prefixlen = ifm->ifa_prefixlen;
511 ifa->ifa_mask = inet_make_mask(ifm->ifa_prefixlen);
512 ifa->ifa_flags = ifm->ifa_flags;
513 ifa->ifa_scope = ifm->ifa_scope;
514 ifa->ifa_dev = in_dev;
516 ifa->ifa_local = nla_get_u32(tb[IFA_LOCAL]);
517 ifa->ifa_address = nla_get_u32(tb[IFA_ADDRESS]);
519 if (tb[IFA_BROADCAST])
520 ifa->ifa_broadcast = nla_get_u32(tb[IFA_BROADCAST]);
523 ifa->ifa_anycast = nla_get_u32(tb[IFA_ANYCAST]);
526 nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ);
528 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
536 static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
538 struct in_ifaddr *ifa;
542 ifa = rtm_to_ifaddr(nlh);
546 return inet_insert_ifa(ifa);
550 * Determine a default network mask, based on the IP address.
553 static __inline__ int inet_abc_len(u32 addr)
555 int rc = -1; /* Something else, probably a multicast. */
564 else if (IN_CLASSB(addr))
566 else if (IN_CLASSC(addr))
574 int devinet_ioctl(unsigned int cmd, void __user *arg)
577 struct sockaddr_in sin_orig;
578 struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;
579 struct in_device *in_dev;
580 struct in_ifaddr **ifap = NULL;
581 struct in_ifaddr *ifa = NULL;
582 struct net_device *dev;
585 int tryaddrmatch = 0;
588 * Fetch the caller's info block into kernel space
591 if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
593 ifr.ifr_name[IFNAMSIZ - 1] = 0;
595 /* save original address for comparison */
596 memcpy(&sin_orig, sin, sizeof(*sin));
598 colon = strchr(ifr.ifr_name, ':');
603 dev_load(ifr.ifr_name);
607 case SIOCGIFADDR: /* Get interface address */
608 case SIOCGIFBRDADDR: /* Get the broadcast address */
609 case SIOCGIFDSTADDR: /* Get the destination address */
610 case SIOCGIFNETMASK: /* Get the netmask for the interface */
611 /* Note that these ioctls will not sleep,
612 so that we do not impose a lock.
613 One day we will be forced to put shlock here (I mean SMP)
615 tryaddrmatch = (sin_orig.sin_family == AF_INET);
616 memset(sin, 0, sizeof(*sin));
617 sin->sin_family = AF_INET;
622 if (!capable(CAP_NET_ADMIN))
625 case SIOCSIFADDR: /* Set interface address (and family) */
626 case SIOCSIFBRDADDR: /* Set the broadcast address */
627 case SIOCSIFDSTADDR: /* Set the destination address */
628 case SIOCSIFNETMASK: /* Set the netmask for the interface */
630 if (!capable(CAP_NET_ADMIN))
633 if (sin->sin_family != AF_INET)
644 if ((dev = __dev_get_by_name(ifr.ifr_name)) == NULL)
650 if ((in_dev = __in_dev_get_rtnl(dev)) != NULL) {
652 /* Matthias Andree */
653 /* compare label and address (4.4BSD style) */
654 /* note: we only do this for a limited set of ioctls
655 and only if the original address family was AF_INET.
656 This is checked above. */
657 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
658 ifap = &ifa->ifa_next) {
659 if (!strcmp(ifr.ifr_name, ifa->ifa_label) &&
660 sin_orig.sin_addr.s_addr ==
666 /* we didn't get a match, maybe the application is
667 4.3BSD-style and passed in junk so we fall back to
668 comparing just the label */
670 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
671 ifap = &ifa->ifa_next)
672 if (!strcmp(ifr.ifr_name, ifa->ifa_label))
677 ret = -EADDRNOTAVAIL;
678 if (!ifa && cmd != SIOCSIFADDR && cmd != SIOCSIFFLAGS)
682 case SIOCGIFADDR: /* Get interface address */
683 sin->sin_addr.s_addr = ifa->ifa_local;
686 case SIOCGIFBRDADDR: /* Get the broadcast address */
687 sin->sin_addr.s_addr = ifa->ifa_broadcast;
690 case SIOCGIFDSTADDR: /* Get the destination address */
691 sin->sin_addr.s_addr = ifa->ifa_address;
694 case SIOCGIFNETMASK: /* Get the netmask for the interface */
695 sin->sin_addr.s_addr = ifa->ifa_mask;
700 ret = -EADDRNOTAVAIL;
704 if (!(ifr.ifr_flags & IFF_UP))
705 inet_del_ifa(in_dev, ifap, 1);
708 ret = dev_change_flags(dev, ifr.ifr_flags);
711 case SIOCSIFADDR: /* Set interface address (and family) */
713 if (inet_abc_len(sin->sin_addr.s_addr) < 0)
718 if ((ifa = inet_alloc_ifa()) == NULL)
721 memcpy(ifa->ifa_label, ifr.ifr_name, IFNAMSIZ);
723 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
726 if (ifa->ifa_local == sin->sin_addr.s_addr)
728 inet_del_ifa(in_dev, ifap, 0);
729 ifa->ifa_broadcast = 0;
730 ifa->ifa_anycast = 0;
733 ifa->ifa_address = ifa->ifa_local = sin->sin_addr.s_addr;
735 if (!(dev->flags & IFF_POINTOPOINT)) {
736 ifa->ifa_prefixlen = inet_abc_len(ifa->ifa_address);
737 ifa->ifa_mask = inet_make_mask(ifa->ifa_prefixlen);
738 if ((dev->flags & IFF_BROADCAST) &&
739 ifa->ifa_prefixlen < 31)
740 ifa->ifa_broadcast = ifa->ifa_address |
743 ifa->ifa_prefixlen = 32;
744 ifa->ifa_mask = inet_make_mask(32);
746 ret = inet_set_ifa(dev, ifa);
749 case SIOCSIFBRDADDR: /* Set the broadcast address */
751 if (ifa->ifa_broadcast != sin->sin_addr.s_addr) {
752 inet_del_ifa(in_dev, ifap, 0);
753 ifa->ifa_broadcast = sin->sin_addr.s_addr;
754 inet_insert_ifa(ifa);
758 case SIOCSIFDSTADDR: /* Set the destination address */
760 if (ifa->ifa_address == sin->sin_addr.s_addr)
763 if (inet_abc_len(sin->sin_addr.s_addr) < 0)
766 inet_del_ifa(in_dev, ifap, 0);
767 ifa->ifa_address = sin->sin_addr.s_addr;
768 inet_insert_ifa(ifa);
771 case SIOCSIFNETMASK: /* Set the netmask for the interface */
774 * The mask we set must be legal.
777 if (bad_mask(sin->sin_addr.s_addr, 0))
780 if (ifa->ifa_mask != sin->sin_addr.s_addr) {
781 u32 old_mask = ifa->ifa_mask;
782 inet_del_ifa(in_dev, ifap, 0);
783 ifa->ifa_mask = sin->sin_addr.s_addr;
784 ifa->ifa_prefixlen = inet_mask_len(ifa->ifa_mask);
786 /* See if current broadcast address matches
787 * with current netmask, then recalculate
788 * the broadcast address. Otherwise it's a
789 * funny address, so don't touch it since
790 * the user seems to know what (s)he's doing...
792 if ((dev->flags & IFF_BROADCAST) &&
793 (ifa->ifa_prefixlen < 31) &&
794 (ifa->ifa_broadcast ==
795 (ifa->ifa_local|~old_mask))) {
796 ifa->ifa_broadcast = (ifa->ifa_local |
797 ~sin->sin_addr.s_addr);
799 inet_insert_ifa(ifa);
809 ret = copy_to_user(arg, &ifr, sizeof(struct ifreq)) ? -EFAULT : 0;
813 static int inet_gifconf(struct net_device *dev, char __user *buf, int len)
815 struct in_device *in_dev = __in_dev_get_rtnl(dev);
816 struct in_ifaddr *ifa;
820 if (!in_dev || (ifa = in_dev->ifa_list) == NULL)
823 for (; ifa; ifa = ifa->ifa_next) {
828 if (len < (int) sizeof(ifr))
830 memset(&ifr, 0, sizeof(struct ifreq));
832 strcpy(ifr.ifr_name, ifa->ifa_label);
834 strcpy(ifr.ifr_name, dev->name);
836 (*(struct sockaddr_in *)&ifr.ifr_addr).sin_family = AF_INET;
837 (*(struct sockaddr_in *)&ifr.ifr_addr).sin_addr.s_addr =
840 if (copy_to_user(buf, &ifr, sizeof(struct ifreq))) {
844 buf += sizeof(struct ifreq);
845 len -= sizeof(struct ifreq);
846 done += sizeof(struct ifreq);
852 u32 inet_select_addr(const struct net_device *dev, u32 dst, int scope)
855 struct in_device *in_dev;
858 in_dev = __in_dev_get_rcu(dev);
862 for_primary_ifa(in_dev) {
863 if (ifa->ifa_scope > scope)
865 if (!dst || inet_ifa_match(dst, ifa)) {
866 addr = ifa->ifa_local;
870 addr = ifa->ifa_local;
871 } endfor_ifa(in_dev);
878 /* Not loopback addresses on loopback should be preferred
879 in this case. It is importnat that lo is the first interface
882 read_lock(&dev_base_lock);
884 for (dev = dev_base; dev; dev = dev->next) {
885 if ((in_dev = __in_dev_get_rcu(dev)) == NULL)
888 for_primary_ifa(in_dev) {
889 if (ifa->ifa_scope != RT_SCOPE_LINK &&
890 ifa->ifa_scope <= scope) {
891 addr = ifa->ifa_local;
892 goto out_unlock_both;
894 } endfor_ifa(in_dev);
897 read_unlock(&dev_base_lock);
903 static u32 confirm_addr_indev(struct in_device *in_dev, u32 dst,
904 u32 local, int scope)
911 (local == ifa->ifa_local || !local) &&
912 ifa->ifa_scope <= scope) {
913 addr = ifa->ifa_local;
918 same = (!local || inet_ifa_match(local, ifa)) &&
919 (!dst || inet_ifa_match(dst, ifa));
923 /* Is the selected addr into dst subnet? */
924 if (inet_ifa_match(addr, ifa))
926 /* No, then can we use new local src? */
927 if (ifa->ifa_scope <= scope) {
928 addr = ifa->ifa_local;
931 /* search for large dst subnet for addr */
935 } endfor_ifa(in_dev);
937 return same? addr : 0;
941 * Confirm that local IP address exists using wildcards:
942 * - dev: only on this interface, 0=any interface
943 * - dst: only in the same subnet as dst, 0=any dst
944 * - local: address, 0=autoselect the local address
945 * - scope: maximum allowed scope value for the local address
947 u32 inet_confirm_addr(const struct net_device *dev, u32 dst, u32 local, int scope)
950 struct in_device *in_dev;
954 if ((in_dev = __in_dev_get_rcu(dev)))
955 addr = confirm_addr_indev(in_dev, dst, local, scope);
961 read_lock(&dev_base_lock);
963 for (dev = dev_base; dev; dev = dev->next) {
964 if ((in_dev = __in_dev_get_rcu(dev))) {
965 addr = confirm_addr_indev(in_dev, dst, local, scope);
971 read_unlock(&dev_base_lock);
980 int register_inetaddr_notifier(struct notifier_block *nb)
982 return blocking_notifier_chain_register(&inetaddr_chain, nb);
985 int unregister_inetaddr_notifier(struct notifier_block *nb)
987 return blocking_notifier_chain_unregister(&inetaddr_chain, nb);
990 /* Rename ifa_labels for a device name change. Make some effort to preserve existing
991 * alias numbering and to create unique labels if possible.
993 static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
995 struct in_ifaddr *ifa;
998 for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
999 char old[IFNAMSIZ], *dot;
1001 memcpy(old, ifa->ifa_label, IFNAMSIZ);
1002 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1005 dot = strchr(ifa->ifa_label, ':');
1007 sprintf(old, ":%d", named);
1010 if (strlen(dot) + strlen(dev->name) < IFNAMSIZ) {
1011 strcat(ifa->ifa_label, dot);
1013 strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot);
1018 /* Called only under RTNL semaphore */
1020 static int inetdev_event(struct notifier_block *this, unsigned long event,
1023 struct net_device *dev = ptr;
1024 struct in_device *in_dev = __in_dev_get_rtnl(dev);
1029 if (event == NETDEV_REGISTER && dev == &loopback_dev) {
1030 in_dev = inetdev_init(dev);
1032 panic("devinet: Failed to create loopback\n");
1033 in_dev->cnf.no_xfrm = 1;
1034 in_dev->cnf.no_policy = 1;
1040 case NETDEV_REGISTER:
1041 printk(KERN_DEBUG "inetdev_event: bug\n");
1047 if (dev == &loopback_dev) {
1048 struct in_ifaddr *ifa;
1049 if ((ifa = inet_alloc_ifa()) != NULL) {
1051 ifa->ifa_address = htonl(INADDR_LOOPBACK);
1052 ifa->ifa_prefixlen = 8;
1053 ifa->ifa_mask = inet_make_mask(8);
1054 in_dev_hold(in_dev);
1055 ifa->ifa_dev = in_dev;
1056 ifa->ifa_scope = RT_SCOPE_HOST;
1057 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1058 inet_insert_ifa(ifa);
1066 case NETDEV_CHANGEMTU:
1069 /* MTU falled under 68, disable IP */
1070 case NETDEV_UNREGISTER:
1071 inetdev_destroy(in_dev);
1073 case NETDEV_CHANGENAME:
1074 /* Do not notify about label change, this event is
1075 * not interesting to applications using netlink.
1077 inetdev_changename(dev, in_dev);
1079 #ifdef CONFIG_SYSCTL
1080 devinet_sysctl_unregister(&in_dev->cnf);
1081 neigh_sysctl_unregister(in_dev->arp_parms);
1082 neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4,
1083 NET_IPV4_NEIGH, "ipv4", NULL, NULL);
1084 devinet_sysctl_register(in_dev, &in_dev->cnf);
1092 static struct notifier_block ip_netdev_notifier = {
1093 .notifier_call =inetdev_event,
1096 static int inet_fill_ifaddr(struct sk_buff *skb, struct in_ifaddr *ifa,
1097 u32 pid, u32 seq, int event, unsigned int flags)
1099 struct ifaddrmsg *ifm;
1100 struct nlmsghdr *nlh;
1101 unsigned char *b = skb->tail;
1103 nlh = NLMSG_NEW(skb, pid, seq, event, sizeof(*ifm), flags);
1104 ifm = NLMSG_DATA(nlh);
1105 ifm->ifa_family = AF_INET;
1106 ifm->ifa_prefixlen = ifa->ifa_prefixlen;
1107 ifm->ifa_flags = ifa->ifa_flags|IFA_F_PERMANENT;
1108 ifm->ifa_scope = ifa->ifa_scope;
1109 ifm->ifa_index = ifa->ifa_dev->dev->ifindex;
1110 if (ifa->ifa_address)
1111 RTA_PUT(skb, IFA_ADDRESS, 4, &ifa->ifa_address);
1113 RTA_PUT(skb, IFA_LOCAL, 4, &ifa->ifa_local);
1114 if (ifa->ifa_broadcast)
1115 RTA_PUT(skb, IFA_BROADCAST, 4, &ifa->ifa_broadcast);
1116 if (ifa->ifa_anycast)
1117 RTA_PUT(skb, IFA_ANYCAST, 4, &ifa->ifa_anycast);
1118 if (ifa->ifa_label[0])
1119 RTA_PUT(skb, IFA_LABEL, IFNAMSIZ, &ifa->ifa_label);
1120 nlh->nlmsg_len = skb->tail - b;
1125 skb_trim(skb, b - skb->data);
1129 static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
1132 struct net_device *dev;
1133 struct in_device *in_dev;
1134 struct in_ifaddr *ifa;
1135 int s_ip_idx, s_idx = cb->args[0];
1137 s_ip_idx = ip_idx = cb->args[1];
1138 read_lock(&dev_base_lock);
1139 for (dev = dev_base, idx = 0; dev; dev = dev->next, idx++) {
1145 if ((in_dev = __in_dev_get_rcu(dev)) == NULL) {
1150 for (ifa = in_dev->ifa_list, ip_idx = 0; ifa;
1151 ifa = ifa->ifa_next, ip_idx++) {
1152 if (ip_idx < s_ip_idx)
1154 if (inet_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).pid,
1156 RTM_NEWADDR, NLM_F_MULTI) <= 0) {
1165 read_unlock(&dev_base_lock);
1167 cb->args[1] = ip_idx;
1172 static void rtmsg_ifa(int event, struct in_ifaddr* ifa)
1174 int size = NLMSG_SPACE(sizeof(struct ifaddrmsg) + 128);
1175 struct sk_buff *skb = alloc_skb(size, GFP_KERNEL);
1178 netlink_set_err(rtnl, 0, RTNLGRP_IPV4_IFADDR, ENOBUFS);
1179 else if (inet_fill_ifaddr(skb, ifa, 0, 0, event, 0) < 0) {
1181 netlink_set_err(rtnl, 0, RTNLGRP_IPV4_IFADDR, EINVAL);
1183 netlink_broadcast(rtnl, skb, 0, RTNLGRP_IPV4_IFADDR, GFP_KERNEL);
1187 static struct rtnetlink_link inet_rtnetlink_table[RTM_NR_MSGTYPES] = {
1188 [RTM_NEWADDR - RTM_BASE] = { .doit = inet_rtm_newaddr, },
1189 [RTM_DELADDR - RTM_BASE] = { .doit = inet_rtm_deladdr, },
1190 [RTM_GETADDR - RTM_BASE] = { .dumpit = inet_dump_ifaddr, },
1191 [RTM_NEWROUTE - RTM_BASE] = { .doit = inet_rtm_newroute, },
1192 [RTM_DELROUTE - RTM_BASE] = { .doit = inet_rtm_delroute, },
1193 [RTM_GETROUTE - RTM_BASE] = { .doit = inet_rtm_getroute,
1194 .dumpit = inet_dump_fib, },
1195 #ifdef CONFIG_IP_MULTIPLE_TABLES
1196 [RTM_GETRULE - RTM_BASE] = { .dumpit = fib4_rules_dump, },
1200 #ifdef CONFIG_SYSCTL
1202 void inet_forward_change(void)
1204 struct net_device *dev;
1205 int on = ipv4_devconf.forwarding;
1207 ipv4_devconf.accept_redirects = !on;
1208 ipv4_devconf_dflt.forwarding = on;
1210 read_lock(&dev_base_lock);
1211 for (dev = dev_base; dev; dev = dev->next) {
1212 struct in_device *in_dev;
1214 in_dev = __in_dev_get_rcu(dev);
1216 in_dev->cnf.forwarding = on;
1219 read_unlock(&dev_base_lock);
1224 static int devinet_sysctl_forward(ctl_table *ctl, int write,
1225 struct file* filp, void __user *buffer,
1226 size_t *lenp, loff_t *ppos)
1228 int *valp = ctl->data;
1230 int ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
1232 if (write && *valp != val) {
1233 if (valp == &ipv4_devconf.forwarding)
1234 inet_forward_change();
1235 else if (valp != &ipv4_devconf_dflt.forwarding)
1242 int ipv4_doint_and_flush(ctl_table *ctl, int write,
1243 struct file* filp, void __user *buffer,
1244 size_t *lenp, loff_t *ppos)
1246 int *valp = ctl->data;
1248 int ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
1250 if (write && *valp != val)
1256 int ipv4_doint_and_flush_strategy(ctl_table *table, int __user *name, int nlen,
1257 void __user *oldval, size_t __user *oldlenp,
1258 void __user *newval, size_t newlen,
1261 int *valp = table->data;
1264 if (!newval || !newlen)
1267 if (newlen != sizeof(int))
1270 if (get_user(new, (int __user *)newval))
1276 if (oldval && oldlenp) {
1279 if (get_user(len, oldlenp))
1283 if (len > table->maxlen)
1284 len = table->maxlen;
1285 if (copy_to_user(oldval, valp, len))
1287 if (put_user(len, oldlenp))
1298 static struct devinet_sysctl_table {
1299 struct ctl_table_header *sysctl_header;
1300 ctl_table devinet_vars[__NET_IPV4_CONF_MAX];
1301 ctl_table devinet_dev[2];
1302 ctl_table devinet_conf_dir[2];
1303 ctl_table devinet_proto_dir[2];
1304 ctl_table devinet_root_dir[2];
1305 } devinet_sysctl = {
1308 .ctl_name = NET_IPV4_CONF_FORWARDING,
1309 .procname = "forwarding",
1310 .data = &ipv4_devconf.forwarding,
1311 .maxlen = sizeof(int),
1313 .proc_handler = &devinet_sysctl_forward,
1316 .ctl_name = NET_IPV4_CONF_MC_FORWARDING,
1317 .procname = "mc_forwarding",
1318 .data = &ipv4_devconf.mc_forwarding,
1319 .maxlen = sizeof(int),
1321 .proc_handler = &proc_dointvec,
1324 .ctl_name = NET_IPV4_CONF_ACCEPT_REDIRECTS,
1325 .procname = "accept_redirects",
1326 .data = &ipv4_devconf.accept_redirects,
1327 .maxlen = sizeof(int),
1329 .proc_handler = &proc_dointvec,
1332 .ctl_name = NET_IPV4_CONF_SECURE_REDIRECTS,
1333 .procname = "secure_redirects",
1334 .data = &ipv4_devconf.secure_redirects,
1335 .maxlen = sizeof(int),
1337 .proc_handler = &proc_dointvec,
1340 .ctl_name = NET_IPV4_CONF_SHARED_MEDIA,
1341 .procname = "shared_media",
1342 .data = &ipv4_devconf.shared_media,
1343 .maxlen = sizeof(int),
1345 .proc_handler = &proc_dointvec,
1348 .ctl_name = NET_IPV4_CONF_RP_FILTER,
1349 .procname = "rp_filter",
1350 .data = &ipv4_devconf.rp_filter,
1351 .maxlen = sizeof(int),
1353 .proc_handler = &proc_dointvec,
1356 .ctl_name = NET_IPV4_CONF_SEND_REDIRECTS,
1357 .procname = "send_redirects",
1358 .data = &ipv4_devconf.send_redirects,
1359 .maxlen = sizeof(int),
1361 .proc_handler = &proc_dointvec,
1364 .ctl_name = NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE,
1365 .procname = "accept_source_route",
1366 .data = &ipv4_devconf.accept_source_route,
1367 .maxlen = sizeof(int),
1369 .proc_handler = &proc_dointvec,
1372 .ctl_name = NET_IPV4_CONF_PROXY_ARP,
1373 .procname = "proxy_arp",
1374 .data = &ipv4_devconf.proxy_arp,
1375 .maxlen = sizeof(int),
1377 .proc_handler = &proc_dointvec,
1380 .ctl_name = NET_IPV4_CONF_MEDIUM_ID,
1381 .procname = "medium_id",
1382 .data = &ipv4_devconf.medium_id,
1383 .maxlen = sizeof(int),
1385 .proc_handler = &proc_dointvec,
1388 .ctl_name = NET_IPV4_CONF_BOOTP_RELAY,
1389 .procname = "bootp_relay",
1390 .data = &ipv4_devconf.bootp_relay,
1391 .maxlen = sizeof(int),
1393 .proc_handler = &proc_dointvec,
1396 .ctl_name = NET_IPV4_CONF_LOG_MARTIANS,
1397 .procname = "log_martians",
1398 .data = &ipv4_devconf.log_martians,
1399 .maxlen = sizeof(int),
1401 .proc_handler = &proc_dointvec,
1404 .ctl_name = NET_IPV4_CONF_TAG,
1406 .data = &ipv4_devconf.tag,
1407 .maxlen = sizeof(int),
1409 .proc_handler = &proc_dointvec,
1412 .ctl_name = NET_IPV4_CONF_ARPFILTER,
1413 .procname = "arp_filter",
1414 .data = &ipv4_devconf.arp_filter,
1415 .maxlen = sizeof(int),
1417 .proc_handler = &proc_dointvec,
1420 .ctl_name = NET_IPV4_CONF_ARP_ANNOUNCE,
1421 .procname = "arp_announce",
1422 .data = &ipv4_devconf.arp_announce,
1423 .maxlen = sizeof(int),
1425 .proc_handler = &proc_dointvec,
1428 .ctl_name = NET_IPV4_CONF_ARP_IGNORE,
1429 .procname = "arp_ignore",
1430 .data = &ipv4_devconf.arp_ignore,
1431 .maxlen = sizeof(int),
1433 .proc_handler = &proc_dointvec,
1436 .ctl_name = NET_IPV4_CONF_ARP_ACCEPT,
1437 .procname = "arp_accept",
1438 .data = &ipv4_devconf.arp_accept,
1439 .maxlen = sizeof(int),
1441 .proc_handler = &proc_dointvec,
1444 .ctl_name = NET_IPV4_CONF_NOXFRM,
1445 .procname = "disable_xfrm",
1446 .data = &ipv4_devconf.no_xfrm,
1447 .maxlen = sizeof(int),
1449 .proc_handler = &ipv4_doint_and_flush,
1450 .strategy = &ipv4_doint_and_flush_strategy,
1453 .ctl_name = NET_IPV4_CONF_NOPOLICY,
1454 .procname = "disable_policy",
1455 .data = &ipv4_devconf.no_policy,
1456 .maxlen = sizeof(int),
1458 .proc_handler = &ipv4_doint_and_flush,
1459 .strategy = &ipv4_doint_and_flush_strategy,
1462 .ctl_name = NET_IPV4_CONF_FORCE_IGMP_VERSION,
1463 .procname = "force_igmp_version",
1464 .data = &ipv4_devconf.force_igmp_version,
1465 .maxlen = sizeof(int),
1467 .proc_handler = &ipv4_doint_and_flush,
1468 .strategy = &ipv4_doint_and_flush_strategy,
1471 .ctl_name = NET_IPV4_CONF_PROMOTE_SECONDARIES,
1472 .procname = "promote_secondaries",
1473 .data = &ipv4_devconf.promote_secondaries,
1474 .maxlen = sizeof(int),
1476 .proc_handler = &ipv4_doint_and_flush,
1477 .strategy = &ipv4_doint_and_flush_strategy,
1482 .ctl_name = NET_PROTO_CONF_ALL,
1485 .child = devinet_sysctl.devinet_vars,
1488 .devinet_conf_dir = {
1490 .ctl_name = NET_IPV4_CONF,
1493 .child = devinet_sysctl.devinet_dev,
1496 .devinet_proto_dir = {
1498 .ctl_name = NET_IPV4,
1501 .child = devinet_sysctl.devinet_conf_dir,
1504 .devinet_root_dir = {
1506 .ctl_name = CTL_NET,
1509 .child = devinet_sysctl.devinet_proto_dir,
1514 static void devinet_sysctl_register(struct in_device *in_dev,
1515 struct ipv4_devconf *p)
1518 struct net_device *dev = in_dev ? in_dev->dev : NULL;
1519 struct devinet_sysctl_table *t = kmalloc(sizeof(*t), GFP_KERNEL);
1520 char *dev_name = NULL;
1524 memcpy(t, &devinet_sysctl, sizeof(*t));
1525 for (i = 0; i < ARRAY_SIZE(t->devinet_vars) - 1; i++) {
1526 t->devinet_vars[i].data += (char *)p - (char *)&ipv4_devconf;
1527 t->devinet_vars[i].de = NULL;
1531 dev_name = dev->name;
1532 t->devinet_dev[0].ctl_name = dev->ifindex;
1534 dev_name = "default";
1535 t->devinet_dev[0].ctl_name = NET_PROTO_CONF_DEFAULT;
1539 * Make a copy of dev_name, because '.procname' is regarded as const
1540 * by sysctl and we wouldn't want anyone to change it under our feet
1541 * (see SIOCSIFNAME).
1543 dev_name = kstrdup(dev_name, GFP_KERNEL);
1547 t->devinet_dev[0].procname = dev_name;
1548 t->devinet_dev[0].child = t->devinet_vars;
1549 t->devinet_dev[0].de = NULL;
1550 t->devinet_conf_dir[0].child = t->devinet_dev;
1551 t->devinet_conf_dir[0].de = NULL;
1552 t->devinet_proto_dir[0].child = t->devinet_conf_dir;
1553 t->devinet_proto_dir[0].de = NULL;
1554 t->devinet_root_dir[0].child = t->devinet_proto_dir;
1555 t->devinet_root_dir[0].de = NULL;
1557 t->sysctl_header = register_sysctl_table(t->devinet_root_dir, 0);
1558 if (!t->sysctl_header)
1572 static void devinet_sysctl_unregister(struct ipv4_devconf *p)
1575 struct devinet_sysctl_table *t = p->sysctl;
1577 unregister_sysctl_table(t->sysctl_header);
1578 kfree(t->devinet_dev[0].procname);
1584 void __init devinet_init(void)
1586 register_gifconf(PF_INET, inet_gifconf);
1587 register_netdevice_notifier(&ip_netdev_notifier);
1588 rtnetlink_links[PF_INET] = inet_rtnetlink_table;
1589 #ifdef CONFIG_SYSCTL
1590 devinet_sysctl.sysctl_header =
1591 register_sysctl_table(devinet_sysctl.devinet_root_dir, 0);
1592 devinet_sysctl_register(NULL, &ipv4_devconf_dflt);
1596 EXPORT_SYMBOL(in_dev_finish_destroy);
1597 EXPORT_SYMBOL(inet_select_addr);
1598 EXPORT_SYMBOL(inetdev_by_index);
1599 EXPORT_SYMBOL(register_inetaddr_notifier);
1600 EXPORT_SYMBOL(unregister_inetaddr_notifier);