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/string.h>
40 #include <linux/socket.h>
41 #include <linux/sockios.h>
43 #include <linux/errno.h>
44 #include <linux/interrupt.h>
45 #include <linux/if_addr.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/init.h>
52 #include <linux/notifier.h>
53 #include <linux/inetdevice.h>
54 #include <linux/igmp.h>
56 #include <linux/sysctl.h>
58 #include <linux/kmod.h>
62 #include <net/route.h>
63 #include <net/ip_fib.h>
64 #include <net/rtnetlink.h>
66 struct ipv4_devconf ipv4_devconf = {
68 [NET_IPV4_CONF_ACCEPT_REDIRECTS - 1] = 1,
69 [NET_IPV4_CONF_SEND_REDIRECTS - 1] = 1,
70 [NET_IPV4_CONF_SECURE_REDIRECTS - 1] = 1,
71 [NET_IPV4_CONF_SHARED_MEDIA - 1] = 1,
75 static struct ipv4_devconf ipv4_devconf_dflt = {
77 [NET_IPV4_CONF_ACCEPT_REDIRECTS - 1] = 1,
78 [NET_IPV4_CONF_SEND_REDIRECTS - 1] = 1,
79 [NET_IPV4_CONF_SECURE_REDIRECTS - 1] = 1,
80 [NET_IPV4_CONF_SHARED_MEDIA - 1] = 1,
81 [NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE - 1] = 1,
85 #define IPV4_DEVCONF_DFLT(attr) IPV4_DEVCONF(ipv4_devconf_dflt, attr)
87 static const struct nla_policy ifa_ipv4_policy[IFA_MAX+1] = {
88 [IFA_LOCAL] = { .type = NLA_U32 },
89 [IFA_ADDRESS] = { .type = NLA_U32 },
90 [IFA_BROADCAST] = { .type = NLA_U32 },
91 [IFA_ANYCAST] = { .type = NLA_U32 },
92 [IFA_LABEL] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 },
95 static void rtmsg_ifa(int event, struct in_ifaddr *, struct nlmsghdr *, u32);
97 static BLOCKING_NOTIFIER_HEAD(inetaddr_chain);
98 static void inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
101 static void devinet_sysctl_register(struct in_device *in_dev,
102 struct ipv4_devconf *p);
103 static void devinet_sysctl_unregister(struct ipv4_devconf *p);
106 /* Locks all the inet devices. */
108 static struct in_ifaddr *inet_alloc_ifa(void)
110 struct in_ifaddr *ifa = kzalloc(sizeof(*ifa), GFP_KERNEL);
113 INIT_RCU_HEAD(&ifa->rcu_head);
119 static void inet_rcu_free_ifa(struct rcu_head *head)
121 struct in_ifaddr *ifa = container_of(head, struct in_ifaddr, rcu_head);
123 in_dev_put(ifa->ifa_dev);
127 static inline void inet_free_ifa(struct in_ifaddr *ifa)
129 call_rcu(&ifa->rcu_head, inet_rcu_free_ifa);
132 void in_dev_finish_destroy(struct in_device *idev)
134 struct net_device *dev = idev->dev;
136 BUG_TRAP(!idev->ifa_list);
137 BUG_TRAP(!idev->mc_list);
138 #ifdef NET_REFCNT_DEBUG
139 printk(KERN_DEBUG "in_dev_finish_destroy: %p=%s\n",
140 idev, dev ? dev->name : "NIL");
144 printk("Freeing alive in_device %p\n", idev);
150 static struct in_device *inetdev_init(struct net_device *dev)
152 struct in_device *in_dev;
156 in_dev = kzalloc(sizeof(*in_dev), GFP_KERNEL);
159 INIT_RCU_HEAD(&in_dev->rcu_head);
160 memcpy(&in_dev->cnf, &ipv4_devconf_dflt, sizeof(in_dev->cnf));
161 in_dev->cnf.sysctl = NULL;
163 if ((in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl)) == NULL)
165 /* Reference in_dev->dev */
168 neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4,
169 NET_IPV4_NEIGH, "ipv4", NULL, NULL);
172 /* Account for reference dev->ip_ptr (below) */
176 devinet_sysctl_register(in_dev, &in_dev->cnf);
178 ip_mc_init_dev(in_dev);
179 if (dev->flags & IFF_UP)
182 /* we can receive as soon as ip_ptr is set -- do this last */
183 rcu_assign_pointer(dev->ip_ptr, in_dev);
192 static void in_dev_rcu_put(struct rcu_head *head)
194 struct in_device *idev = container_of(head, struct in_device, rcu_head);
198 static void inetdev_destroy(struct in_device *in_dev)
200 struct in_ifaddr *ifa;
201 struct net_device *dev;
206 if (dev == &loopback_dev)
211 ip_mc_destroy_dev(in_dev);
213 while ((ifa = in_dev->ifa_list) != NULL) {
214 inet_del_ifa(in_dev, &in_dev->ifa_list, 0);
219 devinet_sysctl_unregister(&in_dev->cnf);
225 neigh_sysctl_unregister(in_dev->arp_parms);
227 neigh_parms_release(&arp_tbl, in_dev->arp_parms);
230 call_rcu(&in_dev->rcu_head, in_dev_rcu_put);
233 int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b)
236 for_primary_ifa(in_dev) {
237 if (inet_ifa_match(a, ifa)) {
238 if (!b || inet_ifa_match(b, ifa)) {
243 } endfor_ifa(in_dev);
248 static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
249 int destroy, struct nlmsghdr *nlh, u32 pid)
251 struct in_ifaddr *promote = NULL;
252 struct in_ifaddr *ifa, *ifa1 = *ifap;
253 struct in_ifaddr *last_prim = in_dev->ifa_list;
254 struct in_ifaddr *prev_prom = NULL;
255 int do_promote = IN_DEV_PROMOTE_SECONDARIES(in_dev);
259 /* 1. Deleting primary ifaddr forces deletion all secondaries
260 * unless alias promotion is set
263 if (!(ifa1->ifa_flags & IFA_F_SECONDARY)) {
264 struct in_ifaddr **ifap1 = &ifa1->ifa_next;
266 while ((ifa = *ifap1) != NULL) {
267 if (!(ifa->ifa_flags & IFA_F_SECONDARY) &&
268 ifa1->ifa_scope <= ifa->ifa_scope)
271 if (!(ifa->ifa_flags & IFA_F_SECONDARY) ||
272 ifa1->ifa_mask != ifa->ifa_mask ||
273 !inet_ifa_match(ifa1->ifa_address, ifa)) {
274 ifap1 = &ifa->ifa_next;
280 *ifap1 = ifa->ifa_next;
282 rtmsg_ifa(RTM_DELADDR, ifa, nlh, pid);
283 blocking_notifier_call_chain(&inetaddr_chain,
295 *ifap = ifa1->ifa_next;
297 /* 3. Announce address deletion */
299 /* Send message first, then call notifier.
300 At first sight, FIB update triggered by notifier
301 will refer to already deleted ifaddr, that could confuse
302 netlink listeners. It is not true: look, gated sees
303 that route deleted and if it still thinks that ifaddr
304 is valid, it will try to restore deleted routes... Grr.
305 So that, this order is correct.
307 rtmsg_ifa(RTM_DELADDR, ifa1, nlh, pid);
308 blocking_notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa1);
313 prev_prom->ifa_next = promote->ifa_next;
314 promote->ifa_next = last_prim->ifa_next;
315 last_prim->ifa_next = promote;
318 promote->ifa_flags &= ~IFA_F_SECONDARY;
319 rtmsg_ifa(RTM_NEWADDR, promote, nlh, pid);
320 blocking_notifier_call_chain(&inetaddr_chain,
322 for (ifa = promote->ifa_next; ifa; ifa = ifa->ifa_next) {
323 if (ifa1->ifa_mask != ifa->ifa_mask ||
324 !inet_ifa_match(ifa1->ifa_address, ifa))
333 if (!in_dev->ifa_list)
334 inetdev_destroy(in_dev);
338 static void inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
341 __inet_del_ifa(in_dev, ifap, destroy, NULL, 0);
344 static int __inet_insert_ifa(struct in_ifaddr *ifa, struct nlmsghdr *nlh,
347 struct in_device *in_dev = ifa->ifa_dev;
348 struct in_ifaddr *ifa1, **ifap, **last_primary;
352 if (!ifa->ifa_local) {
357 ifa->ifa_flags &= ~IFA_F_SECONDARY;
358 last_primary = &in_dev->ifa_list;
360 for (ifap = &in_dev->ifa_list; (ifa1 = *ifap) != NULL;
361 ifap = &ifa1->ifa_next) {
362 if (!(ifa1->ifa_flags & IFA_F_SECONDARY) &&
363 ifa->ifa_scope <= ifa1->ifa_scope)
364 last_primary = &ifa1->ifa_next;
365 if (ifa1->ifa_mask == ifa->ifa_mask &&
366 inet_ifa_match(ifa1->ifa_address, ifa)) {
367 if (ifa1->ifa_local == ifa->ifa_local) {
371 if (ifa1->ifa_scope != ifa->ifa_scope) {
375 ifa->ifa_flags |= IFA_F_SECONDARY;
379 if (!(ifa->ifa_flags & IFA_F_SECONDARY)) {
380 net_srandom(ifa->ifa_local);
384 ifa->ifa_next = *ifap;
387 /* Send message first, then call notifier.
388 Notifier will trigger FIB update, so that
389 listeners of netlink will know about new ifaddr */
390 rtmsg_ifa(RTM_NEWADDR, ifa, nlh, pid);
391 blocking_notifier_call_chain(&inetaddr_chain, NETDEV_UP, ifa);
396 static int inet_insert_ifa(struct in_ifaddr *ifa)
398 return __inet_insert_ifa(ifa, NULL, 0);
401 static int inet_set_ifa(struct net_device *dev, struct in_ifaddr *ifa)
403 struct in_device *in_dev = __in_dev_get_rtnl(dev);
411 ipv4_devconf_setall(in_dev);
412 if (ifa->ifa_dev != in_dev) {
413 BUG_TRAP(!ifa->ifa_dev);
415 ifa->ifa_dev = in_dev;
417 if (LOOPBACK(ifa->ifa_local))
418 ifa->ifa_scope = RT_SCOPE_HOST;
419 return inet_insert_ifa(ifa);
422 struct in_device *inetdev_by_index(int ifindex)
424 struct net_device *dev;
425 struct in_device *in_dev = NULL;
426 read_lock(&dev_base_lock);
427 dev = __dev_get_by_index(ifindex);
429 in_dev = in_dev_get(dev);
430 read_unlock(&dev_base_lock);
434 /* Called only from RTNL semaphored context. No locks. */
436 struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix,
441 for_primary_ifa(in_dev) {
442 if (ifa->ifa_mask == mask && inet_ifa_match(prefix, ifa))
444 } endfor_ifa(in_dev);
448 static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
450 struct nlattr *tb[IFA_MAX+1];
451 struct in_device *in_dev;
452 struct ifaddrmsg *ifm;
453 struct in_ifaddr *ifa, **ifap;
458 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy);
462 ifm = nlmsg_data(nlh);
463 in_dev = inetdev_by_index(ifm->ifa_index);
464 if (in_dev == NULL) {
469 __in_dev_put(in_dev);
471 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
472 ifap = &ifa->ifa_next) {
474 ifa->ifa_local != nla_get_be32(tb[IFA_LOCAL]))
477 if (tb[IFA_LABEL] && nla_strcmp(tb[IFA_LABEL], ifa->ifa_label))
480 if (tb[IFA_ADDRESS] &&
481 (ifm->ifa_prefixlen != ifa->ifa_prefixlen ||
482 !inet_ifa_match(nla_get_be32(tb[IFA_ADDRESS]), ifa)))
485 __inet_del_ifa(in_dev, ifap, 1, nlh, NETLINK_CB(skb).pid);
489 err = -EADDRNOTAVAIL;
494 static struct in_ifaddr *rtm_to_ifaddr(struct nlmsghdr *nlh)
496 struct nlattr *tb[IFA_MAX+1];
497 struct in_ifaddr *ifa;
498 struct ifaddrmsg *ifm;
499 struct net_device *dev;
500 struct in_device *in_dev;
503 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy);
507 ifm = nlmsg_data(nlh);
508 if (ifm->ifa_prefixlen > 32 || tb[IFA_LOCAL] == NULL) {
513 dev = __dev_get_by_index(ifm->ifa_index);
519 in_dev = __in_dev_get_rtnl(dev);
520 if (in_dev == NULL) {
525 ipv4_devconf_setall(in_dev);
527 ifa = inet_alloc_ifa();
530 * A potential indev allocation can be left alive, it stays
531 * assigned to its device and is destroy with it.
539 if (tb[IFA_ADDRESS] == NULL)
540 tb[IFA_ADDRESS] = tb[IFA_LOCAL];
542 ifa->ifa_prefixlen = ifm->ifa_prefixlen;
543 ifa->ifa_mask = inet_make_mask(ifm->ifa_prefixlen);
544 ifa->ifa_flags = ifm->ifa_flags;
545 ifa->ifa_scope = ifm->ifa_scope;
546 ifa->ifa_dev = in_dev;
548 ifa->ifa_local = nla_get_be32(tb[IFA_LOCAL]);
549 ifa->ifa_address = nla_get_be32(tb[IFA_ADDRESS]);
551 if (tb[IFA_BROADCAST])
552 ifa->ifa_broadcast = nla_get_be32(tb[IFA_BROADCAST]);
555 ifa->ifa_anycast = nla_get_be32(tb[IFA_ANYCAST]);
558 nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ);
560 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
568 static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
570 struct in_ifaddr *ifa;
574 ifa = rtm_to_ifaddr(nlh);
578 return __inet_insert_ifa(ifa, nlh, NETLINK_CB(skb).pid);
582 * Determine a default network mask, based on the IP address.
585 static __inline__ int inet_abc_len(__be32 addr)
587 int rc = -1; /* Something else, probably a multicast. */
592 __u32 haddr = ntohl(addr);
594 if (IN_CLASSA(haddr))
596 else if (IN_CLASSB(haddr))
598 else if (IN_CLASSC(haddr))
606 int devinet_ioctl(unsigned int cmd, void __user *arg)
609 struct sockaddr_in sin_orig;
610 struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;
611 struct in_device *in_dev;
612 struct in_ifaddr **ifap = NULL;
613 struct in_ifaddr *ifa = NULL;
614 struct net_device *dev;
617 int tryaddrmatch = 0;
620 * Fetch the caller's info block into kernel space
623 if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
625 ifr.ifr_name[IFNAMSIZ - 1] = 0;
627 /* save original address for comparison */
628 memcpy(&sin_orig, sin, sizeof(*sin));
630 colon = strchr(ifr.ifr_name, ':');
635 dev_load(ifr.ifr_name);
639 case SIOCGIFADDR: /* Get interface address */
640 case SIOCGIFBRDADDR: /* Get the broadcast address */
641 case SIOCGIFDSTADDR: /* Get the destination address */
642 case SIOCGIFNETMASK: /* Get the netmask for the interface */
643 /* Note that these ioctls will not sleep,
644 so that we do not impose a lock.
645 One day we will be forced to put shlock here (I mean SMP)
647 tryaddrmatch = (sin_orig.sin_family == AF_INET);
648 memset(sin, 0, sizeof(*sin));
649 sin->sin_family = AF_INET;
654 if (!capable(CAP_NET_ADMIN))
657 case SIOCSIFADDR: /* Set interface address (and family) */
658 case SIOCSIFBRDADDR: /* Set the broadcast address */
659 case SIOCSIFDSTADDR: /* Set the destination address */
660 case SIOCSIFNETMASK: /* Set the netmask for the interface */
662 if (!capable(CAP_NET_ADMIN))
665 if (sin->sin_family != AF_INET)
676 if ((dev = __dev_get_by_name(ifr.ifr_name)) == NULL)
682 if ((in_dev = __in_dev_get_rtnl(dev)) != NULL) {
684 /* Matthias Andree */
685 /* compare label and address (4.4BSD style) */
686 /* note: we only do this for a limited set of ioctls
687 and only if the original address family was AF_INET.
688 This is checked above. */
689 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
690 ifap = &ifa->ifa_next) {
691 if (!strcmp(ifr.ifr_name, ifa->ifa_label) &&
692 sin_orig.sin_addr.s_addr ==
698 /* we didn't get a match, maybe the application is
699 4.3BSD-style and passed in junk so we fall back to
700 comparing just the label */
702 for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
703 ifap = &ifa->ifa_next)
704 if (!strcmp(ifr.ifr_name, ifa->ifa_label))
709 ret = -EADDRNOTAVAIL;
710 if (!ifa && cmd != SIOCSIFADDR && cmd != SIOCSIFFLAGS)
714 case SIOCGIFADDR: /* Get interface address */
715 sin->sin_addr.s_addr = ifa->ifa_local;
718 case SIOCGIFBRDADDR: /* Get the broadcast address */
719 sin->sin_addr.s_addr = ifa->ifa_broadcast;
722 case SIOCGIFDSTADDR: /* Get the destination address */
723 sin->sin_addr.s_addr = ifa->ifa_address;
726 case SIOCGIFNETMASK: /* Get the netmask for the interface */
727 sin->sin_addr.s_addr = ifa->ifa_mask;
732 ret = -EADDRNOTAVAIL;
736 if (!(ifr.ifr_flags & IFF_UP))
737 inet_del_ifa(in_dev, ifap, 1);
740 ret = dev_change_flags(dev, ifr.ifr_flags);
743 case SIOCSIFADDR: /* Set interface address (and family) */
745 if (inet_abc_len(sin->sin_addr.s_addr) < 0)
750 if ((ifa = inet_alloc_ifa()) == NULL)
753 memcpy(ifa->ifa_label, ifr.ifr_name, IFNAMSIZ);
755 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
758 if (ifa->ifa_local == sin->sin_addr.s_addr)
760 inet_del_ifa(in_dev, ifap, 0);
761 ifa->ifa_broadcast = 0;
762 ifa->ifa_anycast = 0;
765 ifa->ifa_address = ifa->ifa_local = sin->sin_addr.s_addr;
767 if (!(dev->flags & IFF_POINTOPOINT)) {
768 ifa->ifa_prefixlen = inet_abc_len(ifa->ifa_address);
769 ifa->ifa_mask = inet_make_mask(ifa->ifa_prefixlen);
770 if ((dev->flags & IFF_BROADCAST) &&
771 ifa->ifa_prefixlen < 31)
772 ifa->ifa_broadcast = ifa->ifa_address |
775 ifa->ifa_prefixlen = 32;
776 ifa->ifa_mask = inet_make_mask(32);
778 ret = inet_set_ifa(dev, ifa);
781 case SIOCSIFBRDADDR: /* Set the broadcast address */
783 if (ifa->ifa_broadcast != sin->sin_addr.s_addr) {
784 inet_del_ifa(in_dev, ifap, 0);
785 ifa->ifa_broadcast = sin->sin_addr.s_addr;
786 inet_insert_ifa(ifa);
790 case SIOCSIFDSTADDR: /* Set the destination address */
792 if (ifa->ifa_address == sin->sin_addr.s_addr)
795 if (inet_abc_len(sin->sin_addr.s_addr) < 0)
798 inet_del_ifa(in_dev, ifap, 0);
799 ifa->ifa_address = sin->sin_addr.s_addr;
800 inet_insert_ifa(ifa);
803 case SIOCSIFNETMASK: /* Set the netmask for the interface */
806 * The mask we set must be legal.
809 if (bad_mask(sin->sin_addr.s_addr, 0))
812 if (ifa->ifa_mask != sin->sin_addr.s_addr) {
813 __be32 old_mask = ifa->ifa_mask;
814 inet_del_ifa(in_dev, ifap, 0);
815 ifa->ifa_mask = sin->sin_addr.s_addr;
816 ifa->ifa_prefixlen = inet_mask_len(ifa->ifa_mask);
818 /* See if current broadcast address matches
819 * with current netmask, then recalculate
820 * the broadcast address. Otherwise it's a
821 * funny address, so don't touch it since
822 * the user seems to know what (s)he's doing...
824 if ((dev->flags & IFF_BROADCAST) &&
825 (ifa->ifa_prefixlen < 31) &&
826 (ifa->ifa_broadcast ==
827 (ifa->ifa_local|~old_mask))) {
828 ifa->ifa_broadcast = (ifa->ifa_local |
829 ~sin->sin_addr.s_addr);
831 inet_insert_ifa(ifa);
841 ret = copy_to_user(arg, &ifr, sizeof(struct ifreq)) ? -EFAULT : 0;
845 static int inet_gifconf(struct net_device *dev, char __user *buf, int len)
847 struct in_device *in_dev = __in_dev_get_rtnl(dev);
848 struct in_ifaddr *ifa;
852 if (!in_dev || (ifa = in_dev->ifa_list) == NULL)
855 for (; ifa; ifa = ifa->ifa_next) {
860 if (len < (int) sizeof(ifr))
862 memset(&ifr, 0, sizeof(struct ifreq));
864 strcpy(ifr.ifr_name, ifa->ifa_label);
866 strcpy(ifr.ifr_name, dev->name);
868 (*(struct sockaddr_in *)&ifr.ifr_addr).sin_family = AF_INET;
869 (*(struct sockaddr_in *)&ifr.ifr_addr).sin_addr.s_addr =
872 if (copy_to_user(buf, &ifr, sizeof(struct ifreq))) {
876 buf += sizeof(struct ifreq);
877 len -= sizeof(struct ifreq);
878 done += sizeof(struct ifreq);
884 __be32 inet_select_addr(const struct net_device *dev, __be32 dst, int scope)
887 struct in_device *in_dev;
890 in_dev = __in_dev_get_rcu(dev);
894 for_primary_ifa(in_dev) {
895 if (ifa->ifa_scope > scope)
897 if (!dst || inet_ifa_match(dst, ifa)) {
898 addr = ifa->ifa_local;
902 addr = ifa->ifa_local;
903 } endfor_ifa(in_dev);
910 /* Not loopback addresses on loopback should be preferred
911 in this case. It is importnat that lo is the first interface
914 read_lock(&dev_base_lock);
916 for_each_netdev(dev) {
917 if ((in_dev = __in_dev_get_rcu(dev)) == NULL)
920 for_primary_ifa(in_dev) {
921 if (ifa->ifa_scope != RT_SCOPE_LINK &&
922 ifa->ifa_scope <= scope) {
923 addr = ifa->ifa_local;
924 goto out_unlock_both;
926 } endfor_ifa(in_dev);
929 read_unlock(&dev_base_lock);
935 static __be32 confirm_addr_indev(struct in_device *in_dev, __be32 dst,
936 __be32 local, int scope)
943 (local == ifa->ifa_local || !local) &&
944 ifa->ifa_scope <= scope) {
945 addr = ifa->ifa_local;
950 same = (!local || inet_ifa_match(local, ifa)) &&
951 (!dst || inet_ifa_match(dst, ifa));
955 /* Is the selected addr into dst subnet? */
956 if (inet_ifa_match(addr, ifa))
958 /* No, then can we use new local src? */
959 if (ifa->ifa_scope <= scope) {
960 addr = ifa->ifa_local;
963 /* search for large dst subnet for addr */
967 } endfor_ifa(in_dev);
969 return same? addr : 0;
973 * Confirm that local IP address exists using wildcards:
974 * - dev: only on this interface, 0=any interface
975 * - dst: only in the same subnet as dst, 0=any dst
976 * - local: address, 0=autoselect the local address
977 * - scope: maximum allowed scope value for the local address
979 __be32 inet_confirm_addr(const struct net_device *dev, __be32 dst, __be32 local, int scope)
982 struct in_device *in_dev;
986 if ((in_dev = __in_dev_get_rcu(dev)))
987 addr = confirm_addr_indev(in_dev, dst, local, scope);
993 read_lock(&dev_base_lock);
995 for_each_netdev(dev) {
996 if ((in_dev = __in_dev_get_rcu(dev))) {
997 addr = confirm_addr_indev(in_dev, dst, local, scope);
1003 read_unlock(&dev_base_lock);
1012 int register_inetaddr_notifier(struct notifier_block *nb)
1014 return blocking_notifier_chain_register(&inetaddr_chain, nb);
1017 int unregister_inetaddr_notifier(struct notifier_block *nb)
1019 return blocking_notifier_chain_unregister(&inetaddr_chain, nb);
1022 /* Rename ifa_labels for a device name change. Make some effort to preserve existing
1023 * alias numbering and to create unique labels if possible.
1025 static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
1027 struct in_ifaddr *ifa;
1030 for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
1031 char old[IFNAMSIZ], *dot;
1033 memcpy(old, ifa->ifa_label, IFNAMSIZ);
1034 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1037 dot = strchr(ifa->ifa_label, ':');
1039 sprintf(old, ":%d", named);
1042 if (strlen(dot) + strlen(dev->name) < IFNAMSIZ) {
1043 strcat(ifa->ifa_label, dot);
1045 strcpy(ifa->ifa_label + (IFNAMSIZ - strlen(dot) - 1), dot);
1050 /* Called only under RTNL semaphore */
1052 static int inetdev_event(struct notifier_block *this, unsigned long event,
1055 struct net_device *dev = ptr;
1056 struct in_device *in_dev = __in_dev_get_rtnl(dev);
1061 if (event == NETDEV_REGISTER) {
1062 in_dev = inetdev_init(dev);
1063 if (dev == &loopback_dev) {
1066 "Failed to create loopback\n");
1067 IN_DEV_CONF_SET(in_dev, NOXFRM, 1);
1068 IN_DEV_CONF_SET(in_dev, NOPOLICY, 1);
1075 case NETDEV_REGISTER:
1076 printk(KERN_DEBUG "inetdev_event: bug\n");
1082 if (dev == &loopback_dev) {
1083 struct in_ifaddr *ifa;
1084 if ((ifa = inet_alloc_ifa()) != NULL) {
1086 ifa->ifa_address = htonl(INADDR_LOOPBACK);
1087 ifa->ifa_prefixlen = 8;
1088 ifa->ifa_mask = inet_make_mask(8);
1089 in_dev_hold(in_dev);
1090 ifa->ifa_dev = in_dev;
1091 ifa->ifa_scope = RT_SCOPE_HOST;
1092 memcpy(ifa->ifa_label, dev->name, IFNAMSIZ);
1093 inet_insert_ifa(ifa);
1101 case NETDEV_CHANGEMTU:
1104 /* MTU falled under 68, disable IP */
1105 case NETDEV_UNREGISTER:
1106 inetdev_destroy(in_dev);
1108 case NETDEV_CHANGENAME:
1109 /* Do not notify about label change, this event is
1110 * not interesting to applications using netlink.
1112 inetdev_changename(dev, in_dev);
1114 #ifdef CONFIG_SYSCTL
1115 devinet_sysctl_unregister(&in_dev->cnf);
1116 neigh_sysctl_unregister(in_dev->arp_parms);
1117 neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4,
1118 NET_IPV4_NEIGH, "ipv4", NULL, NULL);
1119 devinet_sysctl_register(in_dev, &in_dev->cnf);
1127 static struct notifier_block ip_netdev_notifier = {
1128 .notifier_call =inetdev_event,
1131 static inline size_t inet_nlmsg_size(void)
1133 return NLMSG_ALIGN(sizeof(struct ifaddrmsg))
1134 + nla_total_size(4) /* IFA_ADDRESS */
1135 + nla_total_size(4) /* IFA_LOCAL */
1136 + nla_total_size(4) /* IFA_BROADCAST */
1137 + nla_total_size(4) /* IFA_ANYCAST */
1138 + nla_total_size(IFNAMSIZ); /* IFA_LABEL */
1141 static int inet_fill_ifaddr(struct sk_buff *skb, struct in_ifaddr *ifa,
1142 u32 pid, u32 seq, int event, unsigned int flags)
1144 struct ifaddrmsg *ifm;
1145 struct nlmsghdr *nlh;
1147 nlh = nlmsg_put(skb, pid, seq, event, sizeof(*ifm), flags);
1151 ifm = nlmsg_data(nlh);
1152 ifm->ifa_family = AF_INET;
1153 ifm->ifa_prefixlen = ifa->ifa_prefixlen;
1154 ifm->ifa_flags = ifa->ifa_flags|IFA_F_PERMANENT;
1155 ifm->ifa_scope = ifa->ifa_scope;
1156 ifm->ifa_index = ifa->ifa_dev->dev->ifindex;
1158 if (ifa->ifa_address)
1159 NLA_PUT_BE32(skb, IFA_ADDRESS, ifa->ifa_address);
1162 NLA_PUT_BE32(skb, IFA_LOCAL, ifa->ifa_local);
1164 if (ifa->ifa_broadcast)
1165 NLA_PUT_BE32(skb, IFA_BROADCAST, ifa->ifa_broadcast);
1167 if (ifa->ifa_anycast)
1168 NLA_PUT_BE32(skb, IFA_ANYCAST, ifa->ifa_anycast);
1170 if (ifa->ifa_label[0])
1171 NLA_PUT_STRING(skb, IFA_LABEL, ifa->ifa_label);
1173 return nlmsg_end(skb, nlh);
1176 nlmsg_cancel(skb, nlh);
1180 static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
1183 struct net_device *dev;
1184 struct in_device *in_dev;
1185 struct in_ifaddr *ifa;
1186 int s_ip_idx, s_idx = cb->args[0];
1188 s_ip_idx = ip_idx = cb->args[1];
1190 for_each_netdev(dev) {
1195 if ((in_dev = __in_dev_get_rtnl(dev)) == NULL)
1198 for (ifa = in_dev->ifa_list, ip_idx = 0; ifa;
1199 ifa = ifa->ifa_next, ip_idx++) {
1200 if (ip_idx < s_ip_idx)
1202 if (inet_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).pid,
1204 RTM_NEWADDR, NLM_F_MULTI) <= 0)
1213 cb->args[1] = ip_idx;
1218 static void rtmsg_ifa(int event, struct in_ifaddr* ifa, struct nlmsghdr *nlh,
1221 struct sk_buff *skb;
1222 u32 seq = nlh ? nlh->nlmsg_seq : 0;
1225 skb = nlmsg_new(inet_nlmsg_size(), GFP_KERNEL);
1229 err = inet_fill_ifaddr(skb, ifa, pid, seq, event, 0);
1231 /* -EMSGSIZE implies BUG in inet_nlmsg_size() */
1232 WARN_ON(err == -EMSGSIZE);
1236 err = rtnl_notify(skb, pid, RTNLGRP_IPV4_IFADDR, nlh, GFP_KERNEL);
1239 rtnl_set_sk_err(RTNLGRP_IPV4_IFADDR, err);
1242 #ifdef CONFIG_SYSCTL
1244 static void devinet_copy_dflt_conf(int i)
1246 struct net_device *dev;
1248 read_lock(&dev_base_lock);
1249 for_each_netdev(dev) {
1250 struct in_device *in_dev;
1252 in_dev = __in_dev_get_rcu(dev);
1253 if (in_dev && !test_bit(i, in_dev->cnf.state))
1254 in_dev->cnf.data[i] = ipv4_devconf_dflt.data[i];
1257 read_unlock(&dev_base_lock);
1260 static int devinet_conf_proc(ctl_table *ctl, int write,
1261 struct file* filp, void __user *buffer,
1262 size_t *lenp, loff_t *ppos)
1264 int ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
1267 struct ipv4_devconf *cnf = ctl->extra1;
1268 int i = (int *)ctl->data - cnf->data;
1270 set_bit(i, cnf->state);
1272 if (cnf == &ipv4_devconf_dflt)
1273 devinet_copy_dflt_conf(i);
1279 static int devinet_conf_sysctl(ctl_table *table, int __user *name, int nlen,
1280 void __user *oldval, size_t __user *oldlenp,
1281 void __user *newval, size_t newlen)
1283 struct ipv4_devconf *cnf;
1284 int *valp = table->data;
1288 if (!newval || !newlen)
1291 if (newlen != sizeof(int))
1294 if (get_user(new, (int __user *)newval))
1300 if (oldval && oldlenp) {
1303 if (get_user(len, oldlenp))
1307 if (len > table->maxlen)
1308 len = table->maxlen;
1309 if (copy_to_user(oldval, valp, len))
1311 if (put_user(len, oldlenp))
1318 cnf = table->extra1;
1319 i = (int *)table->data - cnf->data;
1321 set_bit(i, cnf->state);
1323 if (cnf == &ipv4_devconf_dflt)
1324 devinet_copy_dflt_conf(i);
1329 void inet_forward_change(void)
1331 struct net_device *dev;
1332 int on = IPV4_DEVCONF_ALL(FORWARDING);
1334 IPV4_DEVCONF_ALL(ACCEPT_REDIRECTS) = !on;
1335 IPV4_DEVCONF_DFLT(FORWARDING) = on;
1337 read_lock(&dev_base_lock);
1338 for_each_netdev(dev) {
1339 struct in_device *in_dev;
1341 in_dev = __in_dev_get_rcu(dev);
1343 IN_DEV_CONF_SET(in_dev, FORWARDING, on);
1346 read_unlock(&dev_base_lock);
1351 static int devinet_sysctl_forward(ctl_table *ctl, int write,
1352 struct file* filp, void __user *buffer,
1353 size_t *lenp, loff_t *ppos)
1355 int *valp = ctl->data;
1357 int ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
1359 if (write && *valp != val) {
1360 if (valp == &IPV4_DEVCONF_ALL(FORWARDING))
1361 inet_forward_change();
1362 else if (valp != &IPV4_DEVCONF_DFLT(FORWARDING))
1369 int ipv4_doint_and_flush(ctl_table *ctl, int write,
1370 struct file* filp, void __user *buffer,
1371 size_t *lenp, loff_t *ppos)
1373 int *valp = ctl->data;
1375 int ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
1377 if (write && *valp != val)
1383 int ipv4_doint_and_flush_strategy(ctl_table *table, int __user *name, int nlen,
1384 void __user *oldval, size_t __user *oldlenp,
1385 void __user *newval, size_t newlen)
1387 int ret = devinet_conf_sysctl(table, name, nlen, oldval, oldlenp,
1397 #define DEVINET_SYSCTL_ENTRY(attr, name, mval, proc, sysctl) \
1399 .ctl_name = NET_IPV4_CONF_ ## attr, \
1401 .data = ipv4_devconf.data + \
1402 NET_IPV4_CONF_ ## attr - 1, \
1403 .maxlen = sizeof(int), \
1405 .proc_handler = proc, \
1406 .strategy = sysctl, \
1407 .extra1 = &ipv4_devconf, \
1410 #define DEVINET_SYSCTL_RW_ENTRY(attr, name) \
1411 DEVINET_SYSCTL_ENTRY(attr, name, 0644, devinet_conf_proc, \
1412 devinet_conf_sysctl)
1414 #define DEVINET_SYSCTL_RO_ENTRY(attr, name) \
1415 DEVINET_SYSCTL_ENTRY(attr, name, 0444, devinet_conf_proc, \
1416 devinet_conf_sysctl)
1418 #define DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, proc, sysctl) \
1419 DEVINET_SYSCTL_ENTRY(attr, name, 0644, proc, sysctl)
1421 #define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \
1422 DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush, \
1423 ipv4_doint_and_flush_strategy)
1425 static struct devinet_sysctl_table {
1426 struct ctl_table_header *sysctl_header;
1427 ctl_table devinet_vars[__NET_IPV4_CONF_MAX];
1428 ctl_table devinet_dev[2];
1429 ctl_table devinet_conf_dir[2];
1430 ctl_table devinet_proto_dir[2];
1431 ctl_table devinet_root_dir[2];
1432 } devinet_sysctl = {
1434 DEVINET_SYSCTL_COMPLEX_ENTRY(FORWARDING, "forwarding",
1435 devinet_sysctl_forward,
1436 devinet_conf_sysctl),
1437 DEVINET_SYSCTL_RO_ENTRY(MC_FORWARDING, "mc_forwarding"),
1439 DEVINET_SYSCTL_RW_ENTRY(ACCEPT_REDIRECTS, "accept_redirects"),
1440 DEVINET_SYSCTL_RW_ENTRY(SECURE_REDIRECTS, "secure_redirects"),
1441 DEVINET_SYSCTL_RW_ENTRY(SHARED_MEDIA, "shared_media"),
1442 DEVINET_SYSCTL_RW_ENTRY(RP_FILTER, "rp_filter"),
1443 DEVINET_SYSCTL_RW_ENTRY(SEND_REDIRECTS, "send_redirects"),
1444 DEVINET_SYSCTL_RW_ENTRY(ACCEPT_SOURCE_ROUTE,
1445 "accept_source_route"),
1446 DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP, "proxy_arp"),
1447 DEVINET_SYSCTL_RW_ENTRY(MEDIUM_ID, "medium_id"),
1448 DEVINET_SYSCTL_RW_ENTRY(BOOTP_RELAY, "bootp_relay"),
1449 DEVINET_SYSCTL_RW_ENTRY(LOG_MARTIANS, "log_martians"),
1450 DEVINET_SYSCTL_RW_ENTRY(TAG, "tag"),
1451 DEVINET_SYSCTL_RW_ENTRY(ARPFILTER, "arp_filter"),
1452 DEVINET_SYSCTL_RW_ENTRY(ARP_ANNOUNCE, "arp_announce"),
1453 DEVINET_SYSCTL_RW_ENTRY(ARP_IGNORE, "arp_ignore"),
1454 DEVINET_SYSCTL_RW_ENTRY(ARP_ACCEPT, "arp_accept"),
1456 DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
1457 DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
1458 DEVINET_SYSCTL_FLUSHING_ENTRY(FORCE_IGMP_VERSION,
1459 "force_igmp_version"),
1460 DEVINET_SYSCTL_FLUSHING_ENTRY(PROMOTE_SECONDARIES,
1461 "promote_secondaries"),
1465 .ctl_name = NET_PROTO_CONF_ALL,
1468 .child = devinet_sysctl.devinet_vars,
1471 .devinet_conf_dir = {
1473 .ctl_name = NET_IPV4_CONF,
1476 .child = devinet_sysctl.devinet_dev,
1479 .devinet_proto_dir = {
1481 .ctl_name = NET_IPV4,
1484 .child = devinet_sysctl.devinet_conf_dir,
1487 .devinet_root_dir = {
1489 .ctl_name = CTL_NET,
1492 .child = devinet_sysctl.devinet_proto_dir,
1497 static void devinet_sysctl_register(struct in_device *in_dev,
1498 struct ipv4_devconf *p)
1501 struct net_device *dev = in_dev ? in_dev->dev : NULL;
1502 struct devinet_sysctl_table *t = kmemdup(&devinet_sysctl, sizeof(*t),
1504 char *dev_name = NULL;
1508 for (i = 0; i < ARRAY_SIZE(t->devinet_vars) - 1; i++) {
1509 t->devinet_vars[i].data += (char *)p - (char *)&ipv4_devconf;
1510 t->devinet_vars[i].extra1 = p;
1514 dev_name = dev->name;
1515 t->devinet_dev[0].ctl_name = dev->ifindex;
1517 dev_name = "default";
1518 t->devinet_dev[0].ctl_name = NET_PROTO_CONF_DEFAULT;
1522 * Make a copy of dev_name, because '.procname' is regarded as const
1523 * by sysctl and we wouldn't want anyone to change it under our feet
1524 * (see SIOCSIFNAME).
1526 dev_name = kstrdup(dev_name, GFP_KERNEL);
1530 t->devinet_dev[0].procname = dev_name;
1531 t->devinet_dev[0].child = t->devinet_vars;
1532 t->devinet_conf_dir[0].child = t->devinet_dev;
1533 t->devinet_proto_dir[0].child = t->devinet_conf_dir;
1534 t->devinet_root_dir[0].child = t->devinet_proto_dir;
1536 t->sysctl_header = register_sysctl_table(t->devinet_root_dir);
1537 if (!t->sysctl_header)
1551 static void devinet_sysctl_unregister(struct ipv4_devconf *p)
1554 struct devinet_sysctl_table *t = p->sysctl;
1556 unregister_sysctl_table(t->sysctl_header);
1557 kfree(t->devinet_dev[0].procname);
1563 void __init devinet_init(void)
1565 register_gifconf(PF_INET, inet_gifconf);
1566 register_netdevice_notifier(&ip_netdev_notifier);
1568 rtnl_register(PF_INET, RTM_NEWADDR, inet_rtm_newaddr, NULL);
1569 rtnl_register(PF_INET, RTM_DELADDR, inet_rtm_deladdr, NULL);
1570 rtnl_register(PF_INET, RTM_GETADDR, NULL, inet_dump_ifaddr);
1571 #ifdef CONFIG_SYSCTL
1572 devinet_sysctl.sysctl_header =
1573 register_sysctl_table(devinet_sysctl.devinet_root_dir);
1574 devinet_sysctl_register(NULL, &ipv4_devconf_dflt);
1578 EXPORT_SYMBOL(in_dev_finish_destroy);
1579 EXPORT_SYMBOL(inet_select_addr);
1580 EXPORT_SYMBOL(inetdev_by_index);
1581 EXPORT_SYMBOL(register_inetaddr_notifier);
1582 EXPORT_SYMBOL(unregister_inetaddr_notifier);