Lines Matching refs:in_dev
201 static void inet_del_ifa(struct in_device *in_dev,
257 struct in_device *in_dev; in inetdev_init() local
262 in_dev = kzalloc(sizeof(*in_dev), GFP_KERNEL); in inetdev_init()
263 if (!in_dev) in inetdev_init()
265 memcpy(&in_dev->cnf, dev_net(dev)->ipv4.devconf_dflt, in inetdev_init()
266 sizeof(in_dev->cnf)); in inetdev_init()
267 in_dev->cnf.sysctl = NULL; in inetdev_init()
268 in_dev->dev = dev; in inetdev_init()
269 in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl); in inetdev_init()
270 if (!in_dev->arp_parms) in inetdev_init()
272 if (IPV4_DEVCONF(in_dev->cnf, FORWARDING)) in inetdev_init()
275 netdev_hold(dev, &in_dev->dev_tracker, GFP_KERNEL); in inetdev_init()
277 refcount_set(&in_dev->refcnt, 1); in inetdev_init()
279 err = devinet_sysctl_register(in_dev); in inetdev_init()
281 in_dev->dead = 1; in inetdev_init()
282 neigh_parms_release(&arp_tbl, in_dev->arp_parms); in inetdev_init()
283 in_dev_put(in_dev); in inetdev_init()
284 in_dev = NULL; in inetdev_init()
287 ip_mc_init_dev(in_dev); in inetdev_init()
289 ip_mc_up(in_dev); in inetdev_init()
292 rcu_assign_pointer(dev->ip_ptr, in_dev); in inetdev_init()
294 return in_dev ?: ERR_PTR(err); in inetdev_init()
296 kfree(in_dev); in inetdev_init()
297 in_dev = NULL; in inetdev_init()
307 static void inetdev_destroy(struct in_device *in_dev) in inetdev_destroy() argument
314 dev = in_dev->dev; in inetdev_destroy()
316 in_dev->dead = 1; in inetdev_destroy()
318 ip_mc_destroy_dev(in_dev); in inetdev_destroy()
320 while ((ifa = rtnl_dereference(in_dev->ifa_list)) != NULL) { in inetdev_destroy()
321 inet_del_ifa(in_dev, &in_dev->ifa_list, 0); in inetdev_destroy()
327 devinet_sysctl_unregister(in_dev); in inetdev_destroy()
328 neigh_parms_release(&arp_tbl, in_dev->arp_parms); in inetdev_destroy()
331 call_rcu(&in_dev->rcu_head, in_dev_rcu_put); in inetdev_destroy()
334 int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b) in inet_addr_onlink() argument
339 in_dev_for_each_ifa_rcu(ifa, in_dev) { in inet_addr_onlink()
351 static void __inet_del_ifa(struct in_device *in_dev, in __inet_del_ifa() argument
359 int do_promote = IN_DEV_PROMOTE_SECONDARIES(in_dev); in __inet_del_ifa()
364 last_prim = rtnl_dereference(in_dev->ifa_list); in __inet_del_ifa()
365 if (in_dev->dead) in __inet_del_ifa()
464 static void inet_del_ifa(struct in_device *in_dev, in inet_del_ifa() argument
468 __inet_del_ifa(in_dev, ifap, destroy, NULL, 0); in inet_del_ifa()
479 struct in_device *in_dev = ifa->ifa_dev; in __inet_insert_ifa() local
492 last_primary = &in_dev->ifa_list; in __inet_insert_ifa()
497 ifap = &in_dev->ifa_list; in __inet_insert_ifa()
545 inet_hash_insert(dev_net(in_dev->dev), ifa); in __inet_insert_ifa()
566 struct in_device *in_dev = __in_dev_get_rtnl(dev); in inet_set_ifa() local
570 if (!in_dev) { in inet_set_ifa()
574 ipv4_devconf_setall(in_dev); in inet_set_ifa()
575 neigh_parms_data_state_setall(in_dev->arp_parms); in inet_set_ifa()
576 if (ifa->ifa_dev != in_dev) { in inet_set_ifa()
578 in_dev_hold(in_dev); in inet_set_ifa()
579 ifa->ifa_dev = in_dev; in inet_set_ifa()
592 struct in_device *in_dev = NULL; in inetdev_by_index() local
597 in_dev = rcu_dereference_rtnl(dev->ip_ptr); in inetdev_by_index()
599 return in_dev; in inetdev_by_index()
605 struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix, in inet_ifa_byprefix() argument
612 in_dev_for_each_ifa_rtnl(ifa, in_dev) { in inet_ifa_byprefix()
651 struct in_device *in_dev; in inet_rtm_deladdr() local
664 in_dev = inetdev_by_index(net, ifm->ifa_index); in inet_rtm_deladdr()
665 if (!in_dev) { in inet_rtm_deladdr()
670 for (ifap = &in_dev->ifa_list; (ifa = rtnl_dereference(*ifap)) != NULL; in inet_rtm_deladdr()
686 __inet_del_ifa(in_dev, ifap, 1, nlh, NETLINK_CB(skb).portid); in inet_rtm_deladdr()
831 struct in_device *in_dev; in rtm_to_ifaddr() local
849 in_dev = __in_dev_get_rtnl(dev); in rtm_to_ifaddr()
851 if (!in_dev) in rtm_to_ifaddr()
862 ipv4_devconf_setall(in_dev); in rtm_to_ifaddr()
863 neigh_parms_data_state_setall(in_dev->arp_parms); in rtm_to_ifaddr()
864 in_dev_hold(in_dev); in rtm_to_ifaddr()
875 ifa->ifa_dev = in_dev; in rtm_to_ifaddr()
916 struct in_device *in_dev = ifa->ifa_dev; in find_matching_ifa() local
922 in_dev_for_each_ifa_rtnl(ifa1, in_dev) { in find_matching_ifa()
1017 struct in_device *in_dev; in devinet_ioctl() local
1080 in_dev = __in_dev_get_rtnl(dev); in devinet_ioctl()
1081 if (in_dev) { in devinet_ioctl()
1089 for (ifap = &in_dev->ifa_list; in devinet_ioctl()
1103 for (ifap = &in_dev->ifa_list; in devinet_ioctl()
1143 inet_del_ifa(in_dev, ifap, 1); in devinet_ioctl()
1168 inet_del_ifa(in_dev, ifap, 0); in devinet_ioctl()
1193 inet_del_ifa(in_dev, ifap, 0); in devinet_ioctl()
1207 inet_del_ifa(in_dev, ifap, 0); in devinet_ioctl()
1223 inet_del_ifa(in_dev, ifap, 0); in devinet_ioctl()
1252 struct in_device *in_dev = __in_dev_get_rtnl(dev); in inet_gifconf() local
1260 if (!in_dev) in inet_gifconf()
1263 in_dev_for_each_ifa_rtnl(ifa, in_dev) { in inet_gifconf()
1288 static __be32 in_dev_select_addr(const struct in_device *in_dev, in in_dev_select_addr() argument
1293 in_dev_for_each_ifa_rcu(ifa, in_dev) { in in_dev_select_addr()
1309 struct in_device *in_dev; in inet_select_addr() local
1314 in_dev = __in_dev_get_rcu(dev); in inet_select_addr()
1315 if (!in_dev) in inet_select_addr()
1318 if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev))) in inet_select_addr()
1321 in_dev_for_each_ifa_rcu(ifa, in_dev) { in inet_select_addr()
1346 (in_dev = __in_dev_get_rcu(dev))) { in inet_select_addr()
1347 addr = in_dev_select_addr(in_dev, scope); in inet_select_addr()
1360 in_dev = __in_dev_get_rcu(dev); in inet_select_addr()
1361 if (!in_dev) in inet_select_addr()
1364 addr = in_dev_select_addr(in_dev, scope); in inet_select_addr()
1374 static __be32 confirm_addr_indev(struct in_device *in_dev, __be32 dst, in confirm_addr_indev() argument
1382 if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev))) in confirm_addr_indev()
1385 in_dev_for_each_ifa_rcu(ifa, in_dev) { in confirm_addr_indev()
1426 __be32 inet_confirm_addr(struct net *net, struct in_device *in_dev, in inet_confirm_addr() argument
1432 if (in_dev) in inet_confirm_addr()
1433 return confirm_addr_indev(in_dev, dst, local, scope); in inet_confirm_addr()
1437 in_dev = __in_dev_get_rcu(dev); in inet_confirm_addr()
1438 if (in_dev) { in inet_confirm_addr()
1439 addr = confirm_addr_indev(in_dev, dst, local, scope); in inet_confirm_addr()
1482 static void inetdev_changename(struct net_device *dev, struct in_device *in_dev) in inetdev_changename() argument
1487 in_dev_for_each_ifa_rtnl(ifa, in_dev) { in inetdev_changename()
1509 struct in_device *in_dev) in inetdev_send_gratuitous_arp() argument
1514 in_dev_for_each_ifa_rtnl(ifa, in_dev) { in inetdev_send_gratuitous_arp()
1528 struct in_device *in_dev = __in_dev_get_rtnl(dev); in inetdev_event() local
1532 if (!in_dev) { in inetdev_event()
1534 in_dev = inetdev_init(dev); in inetdev_event()
1535 if (IS_ERR(in_dev)) in inetdev_event()
1536 return notifier_from_errno(PTR_ERR(in_dev)); in inetdev_event()
1538 IN_DEV_CONF_SET(in_dev, NOXFRM, 1); in inetdev_event()
1539 IN_DEV_CONF_SET(in_dev, NOPOLICY, 1); in inetdev_event()
1544 in_dev = inetdev_init(dev); in inetdev_event()
1566 in_dev_hold(in_dev); in inetdev_event()
1567 ifa->ifa_dev = in_dev; in inetdev_event()
1572 ipv4_devconf_setall(in_dev); in inetdev_event()
1573 neigh_parms_data_state_setall(in_dev->arp_parms); in inetdev_event()
1577 ip_mc_up(in_dev); in inetdev_event()
1580 if (!IN_DEV_ARP_NOTIFY(in_dev)) in inetdev_event()
1585 inetdev_send_gratuitous_arp(dev, in_dev); in inetdev_event()
1588 ip_mc_down(in_dev); in inetdev_event()
1591 ip_mc_unmap(in_dev); in inetdev_event()
1594 ip_mc_remap(in_dev); in inetdev_event()
1602 inetdev_destroy(in_dev); in inetdev_event()
1608 inetdev_changename(dev, in_dev); in inetdev_event()
1610 devinet_sysctl_unregister(in_dev); in inetdev_event()
1611 devinet_sysctl_register(in_dev); in inetdev_event()
1779 static int in_dev_dump_addr(struct in_device *in_dev, struct sk_buff *skb, in in_dev_dump_addr() argument
1787 in_dev_for_each_ifa_rtnl(ifa, in_dev) { in in_dev_dump_addr()
1823 struct in_device *in_dev; in inet_dump_ifaddr() local
1845 in_dev = __in_dev_get_rtnl(dev); in inet_dump_ifaddr()
1846 if (in_dev) { in inet_dump_ifaddr()
1847 err = in_dev_dump_addr(in_dev, skb, cb, s_ip_idx, in inet_dump_ifaddr()
1865 in_dev = __in_dev_get_rcu(dev); in inet_dump_ifaddr()
1866 if (!in_dev) in inet_dump_ifaddr()
1869 err = in_dev_dump_addr(in_dev, skb, cb, s_ip_idx, in inet_dump_ifaddr()
1927 struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr); in inet_get_link_af_size() local
1929 if (!in_dev) in inet_get_link_af_size()
1938 struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr); in inet_fill_link_af() local
1942 if (!in_dev) in inet_fill_link_af()
1950 ((u32 *) nla_data(nla))[i] = in_dev->cnf.data[i]; in inet_fill_link_af()
1992 struct in_device *in_dev = __in_dev_get_rtnl(dev); in inet_set_link_af() local
1996 if (!in_dev) in inet_set_link_af()
2004 ipv4_devconf_set(in_dev, nla_type(a), nla_get_u32(a)); in inet_set_link_af()
2175 struct in_device *in_dev; in inet_netconf_get_devconf() local
2200 in_dev = __in_dev_get_rtnl(dev); in inet_netconf_get_devconf()
2201 if (!in_dev) in inet_netconf_get_devconf()
2203 devconf = &in_dev->cnf; in inet_netconf_get_devconf()
2235 struct in_device *in_dev; in inet_netconf_dump_devconf() local
2265 in_dev = __in_dev_get_rcu(dev); in inet_netconf_dump_devconf()
2266 if (!in_dev) in inet_netconf_dump_devconf()
2270 &in_dev->cnf, in inet_netconf_dump_devconf()
2322 struct in_device *in_dev; in devinet_copy_dflt_conf() local
2324 in_dev = __in_dev_get_rcu(dev); in devinet_copy_dflt_conf()
2325 if (in_dev && !test_bit(i, in_dev->cnf.state)) in devinet_copy_dflt_conf()
2326 in_dev->cnf.data[i] = net->ipv4.devconf_dflt->data[i]; in devinet_copy_dflt_conf()
2349 struct in_device *in_dev; in inet_forward_change() local
2354 in_dev = __in_dev_get_rtnl(dev); in inet_forward_change()
2355 if (in_dev) { in inet_forward_change()
2356 IN_DEV_CONF_SET(in_dev, FORWARDING, on); in inet_forward_change()
2359 dev->ifindex, &in_dev->cnf); in inet_forward_change()