Lines Matching refs:in_dev

190 static void inet_del_ifa(struct in_device *in_dev,
208 static struct in_ifaddr *inet_alloc_ifa(struct in_device *in_dev) in inet_alloc_ifa() argument
216 in_dev_hold(in_dev); in inet_alloc_ifa()
217 ifa->ifa_dev = in_dev; in inet_alloc_ifa()
268 struct in_device *in_dev; in inetdev_init() local
273 in_dev = kzalloc(sizeof(*in_dev), GFP_KERNEL); in inetdev_init()
274 if (!in_dev) in inetdev_init()
276 memcpy(&in_dev->cnf, dev_net(dev)->ipv4.devconf_dflt, in inetdev_init()
277 sizeof(in_dev->cnf)); in inetdev_init()
278 in_dev->cnf.sysctl = NULL; in inetdev_init()
279 in_dev->dev = dev; in inetdev_init()
280 in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl); in inetdev_init()
281 if (!in_dev->arp_parms) in inetdev_init()
283 if (IPV4_DEVCONF(in_dev->cnf, FORWARDING)) in inetdev_init()
286 netdev_hold(dev, &in_dev->dev_tracker, GFP_KERNEL); in inetdev_init()
288 refcount_set(&in_dev->refcnt, 1); in inetdev_init()
291 err = devinet_sysctl_register(in_dev); in inetdev_init()
293 in_dev->dead = 1; in inetdev_init()
294 neigh_parms_release(&arp_tbl, in_dev->arp_parms); in inetdev_init()
295 in_dev_put(in_dev); in inetdev_init()
296 in_dev = NULL; in inetdev_init()
299 ip_mc_init_dev(in_dev); in inetdev_init()
301 ip_mc_up(in_dev); in inetdev_init()
305 rcu_assign_pointer(dev->ip_ptr, in_dev); in inetdev_init()
307 return in_dev ?: ERR_PTR(err); in inetdev_init()
309 kfree(in_dev); in inetdev_init()
310 in_dev = NULL; in inetdev_init()
314 static void inetdev_destroy(struct in_device *in_dev) in inetdev_destroy() argument
321 dev = in_dev->dev; in inetdev_destroy()
323 in_dev->dead = 1; in inetdev_destroy()
325 ip_mc_destroy_dev(in_dev); in inetdev_destroy()
327 while ((ifa = rtnl_dereference(in_dev->ifa_list)) != NULL) { in inetdev_destroy()
328 inet_del_ifa(in_dev, &in_dev->ifa_list, 0); in inetdev_destroy()
334 devinet_sysctl_unregister(in_dev); in inetdev_destroy()
335 neigh_parms_release(&arp_tbl, in_dev->arp_parms); in inetdev_destroy()
338 in_dev_put(in_dev); in inetdev_destroy()
343 struct in_device *in_dev; in inet_blackhole_dev_init() local
346 in_dev = inetdev_init(blackhole_netdev); in inet_blackhole_dev_init()
349 return PTR_ERR_OR_ZERO(in_dev); in inet_blackhole_dev_init()
353 int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b) in inet_addr_onlink() argument
358 in_dev_for_each_ifa_rcu(ifa, in_dev) { in inet_addr_onlink()
370 static void __inet_del_ifa(struct in_device *in_dev, in __inet_del_ifa() argument
378 int do_promote = IN_DEV_PROMOTE_SECONDARIES(in_dev); in __inet_del_ifa()
384 if (in_dev->dead) in __inet_del_ifa()
483 static void inet_del_ifa(struct in_device *in_dev, in inet_del_ifa() argument
487 __inet_del_ifa(in_dev, ifap, destroy, NULL, 0); in inet_del_ifa()
494 struct in_device *in_dev = ifa->ifa_dev; in __inet_insert_ifa() local
495 struct net *net = dev_net(in_dev->dev); in __inet_insert_ifa()
503 last_primary = &in_dev->ifa_list; in __inet_insert_ifa()
508 ifap = &in_dev->ifa_list; in __inet_insert_ifa()
557 inet_hash_insert(dev_net(in_dev->dev), ifa); in __inet_insert_ifa()
583 struct in_device *in_dev = __in_dev_get_rtnl_net(dev); in inet_set_ifa() local
585 ipv4_devconf_setall(in_dev); in inet_set_ifa()
586 neigh_parms_data_state_setall(in_dev->arp_parms); in inet_set_ifa()
599 struct in_device *in_dev = NULL; in inetdev_by_index() local
604 in_dev = rcu_dereference_rtnl(dev->ip_ptr); in inetdev_by_index()
606 return in_dev; in inetdev_by_index()
612 struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix, in inet_ifa_byprefix() argument
619 in_dev_for_each_ifa_rtnl(ifa, in_dev) { in inet_ifa_byprefix()
658 struct in_device *in_dev; in inet_rtm_deladdr() local
672 in_dev = inetdev_by_index(net, ifm->ifa_index); in inet_rtm_deladdr()
673 if (!in_dev) { in inet_rtm_deladdr()
679 for (ifap = &in_dev->ifa_list; in inet_rtm_deladdr()
697 __inet_del_ifa(in_dev, ifap, 1, nlh, NETLINK_CB(skb).portid); in inet_rtm_deladdr()
887 struct in_device *in_dev; in inet_rtm_to_ifa() local
899 in_dev = __in_dev_get_rtnl_net(dev); in inet_rtm_to_ifa()
901 if (!in_dev) in inet_rtm_to_ifa()
904 ifa = inet_alloc_ifa(in_dev); in inet_rtm_to_ifa()
912 ipv4_devconf_setall(in_dev); in inet_rtm_to_ifa()
913 neigh_parms_data_state_setall(in_dev->arp_parms); in inet_rtm_to_ifa()
947 struct in_device *in_dev = ifa->ifa_dev; in find_matching_ifa() local
950 in_dev_for_each_ifa_rtnl_net(net, ifa1, in_dev) { in find_matching_ifa()
1067 struct in_device *in_dev; in devinet_ioctl() local
1130 in_dev = __in_dev_get_rtnl_net(dev); in devinet_ioctl()
1131 if (in_dev) { in devinet_ioctl()
1139 for (ifap = &in_dev->ifa_list; in devinet_ioctl()
1153 for (ifap = &in_dev->ifa_list; in devinet_ioctl()
1193 inet_del_ifa(in_dev, ifap, 1); in devinet_ioctl()
1209 if (!in_dev) in devinet_ioctl()
1211 ifa = inet_alloc_ifa(in_dev); in devinet_ioctl()
1223 inet_del_ifa(in_dev, ifap, 0); in devinet_ioctl()
1248 inet_del_ifa(in_dev, ifap, 0); in devinet_ioctl()
1262 inet_del_ifa(in_dev, ifap, 0); in devinet_ioctl()
1278 inet_del_ifa(in_dev, ifap, 0); in devinet_ioctl()
1307 struct in_device *in_dev = __in_dev_get_rtnl_net(dev); in inet_gifconf() local
1315 if (!in_dev) in inet_gifconf()
1318 in_dev_for_each_ifa_rtnl_net(dev_net(dev), ifa, in_dev) { in inet_gifconf()
1343 static __be32 in_dev_select_addr(const struct in_device *in_dev, in in_dev_select_addr() argument
1348 in_dev_for_each_ifa_rcu(ifa, in_dev) { in in_dev_select_addr()
1364 struct in_device *in_dev; in inet_select_addr() local
1370 in_dev = __in_dev_get_rcu(dev); in inet_select_addr()
1371 if (!in_dev) in inet_select_addr()
1374 if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev))) in inet_select_addr()
1377 in_dev_for_each_ifa_rcu(ifa, in_dev) { in inet_select_addr()
1402 (in_dev = __in_dev_get_rcu(dev))) { in inet_select_addr()
1403 addr = in_dev_select_addr(in_dev, scope); in inet_select_addr()
1416 in_dev = __in_dev_get_rcu(dev); in inet_select_addr()
1417 if (!in_dev) in inet_select_addr()
1420 addr = in_dev_select_addr(in_dev, scope); in inet_select_addr()
1430 static __be32 confirm_addr_indev(struct in_device *in_dev, __be32 dst, in confirm_addr_indev() argument
1438 if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev))) in confirm_addr_indev()
1441 in_dev_for_each_ifa_rcu(ifa, in_dev) { in confirm_addr_indev()
1482 __be32 inet_confirm_addr(struct net *net, struct in_device *in_dev, in inet_confirm_addr() argument
1488 if (in_dev) in inet_confirm_addr()
1489 return confirm_addr_indev(in_dev, dst, local, scope); in inet_confirm_addr()
1493 in_dev = __in_dev_get_rcu(dev); in inet_confirm_addr()
1494 if (in_dev) { in inet_confirm_addr()
1495 addr = confirm_addr_indev(in_dev, dst, local, scope); in inet_confirm_addr()
1538 static void inetdev_changename(struct net_device *dev, struct in_device *in_dev) in inetdev_changename() argument
1543 in_dev_for_each_ifa_rtnl(ifa, in_dev) { in inetdev_changename()
1565 struct in_device *in_dev) in inetdev_send_gratuitous_arp() argument
1570 in_dev_for_each_ifa_rtnl(ifa, in_dev) { in inetdev_send_gratuitous_arp()
1584 struct in_device *in_dev = __in_dev_get_rtnl(dev); in inetdev_event() local
1588 if (!in_dev) { in inetdev_event()
1590 in_dev = inetdev_init(dev); in inetdev_event()
1591 if (IS_ERR(in_dev)) in inetdev_event()
1592 return notifier_from_errno(PTR_ERR(in_dev)); in inetdev_event()
1594 IN_DEV_CONF_SET(in_dev, NOXFRM, 1); in inetdev_event()
1595 IN_DEV_CONF_SET(in_dev, NOPOLICY, 1); in inetdev_event()
1600 in_dev = inetdev_init(dev); in inetdev_event()
1614 struct in_ifaddr *ifa = inet_alloc_ifa(in_dev); in inetdev_event()
1625 ipv4_devconf_setall(in_dev); in inetdev_event()
1626 neigh_parms_data_state_setall(in_dev->arp_parms); in inetdev_event()
1630 ip_mc_up(in_dev); in inetdev_event()
1633 if (!IN_DEV_ARP_NOTIFY(in_dev)) in inetdev_event()
1638 inetdev_send_gratuitous_arp(dev, in_dev); in inetdev_event()
1641 ip_mc_down(in_dev); in inetdev_event()
1644 ip_mc_unmap(in_dev); in inetdev_event()
1647 ip_mc_remap(in_dev); in inetdev_event()
1655 inetdev_destroy(in_dev); in inetdev_event()
1661 inetdev_changename(dev, in_dev); in inetdev_event()
1663 devinet_sysctl_unregister(in_dev); in inetdev_event()
1664 devinet_sysctl_register(in_dev); in inetdev_event()
1841 static int in_dev_dump_ifmcaddr(struct in_device *in_dev, struct sk_buff *skb, in in_dev_dump_ifmcaddr() argument
1849 for (im = rcu_dereference(in_dev->mc_list); in in_dev_dump_ifmcaddr()
1856 err = inet_fill_ifmcaddr(skb, in_dev->dev, im, fillargs); in in_dev_dump_ifmcaddr()
1870 static int in_dev_dump_ifaddr(struct in_device *in_dev, struct sk_buff *skb, in in_dev_dump_ifaddr() argument
1878 in_dev_for_each_ifa_rcu(ifa, in_dev) { in in_dev_dump_ifaddr()
1898 static int in_dev_dump_addr(struct in_device *in_dev, struct sk_buff *skb, in in_dev_dump_addr() argument
1904 return in_dev_dump_ifaddr(in_dev, skb, cb, s_ip_idx, fillargs); in in_dev_dump_addr()
1906 return in_dev_dump_ifmcaddr(in_dev, skb, cb, s_ip_idx, in in_dev_dump_addr()
1945 struct in_device *in_dev; in inet_dump_addr() local
1962 in_dev = __in_dev_get_rcu(dev); in inet_dump_addr()
1963 if (!in_dev) in inet_dump_addr()
1965 err = in_dev_dump_addr(in_dev, skb, cb, &ctx->ip_idx, in inet_dump_addr()
1974 in_dev = __in_dev_get_rcu(dev); in inet_dump_addr()
1975 if (!in_dev) in inet_dump_addr()
1977 err = in_dev_dump_addr(in_dev, skb, cb, &ctx->ip_idx, in inet_dump_addr()
2034 struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr); in inet_get_link_af_size() local
2036 if (!in_dev) in inet_get_link_af_size()
2045 struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr); in inet_fill_link_af() local
2049 if (!in_dev) in inet_fill_link_af()
2057 ((u32 *) nla_data(nla))[i] = READ_ONCE(in_dev->cnf.data[i]); in inet_fill_link_af()
2099 struct in_device *in_dev = __in_dev_get_rtnl(dev); in inet_set_link_af() local
2103 if (!in_dev) in inet_set_link_af()
2111 ipv4_devconf_set(in_dev, nla_type(a), nla_get_u32(a)); in inet_set_link_af()
2281 struct in_device *in_dev = NULL; in inet_netconf_get_devconf() local
2306 in_dev = in_dev_get(dev); in inet_netconf_get_devconf()
2307 if (!in_dev) in inet_netconf_get_devconf()
2309 devconf = &in_dev->cnf; in inet_netconf_get_devconf()
2330 if (in_dev) in inet_netconf_get_devconf()
2331 in_dev_put(in_dev); in inet_netconf_get_devconf()
2345 const struct in_device *in_dev; in inet_netconf_dump_devconf() local
2366 in_dev = __in_dev_get_rcu(dev); in inet_netconf_dump_devconf()
2367 if (!in_dev) in inet_netconf_dump_devconf()
2370 &in_dev->cnf, in inet_netconf_dump_devconf()
2413 struct in_device *in_dev; in devinet_copy_dflt_conf() local
2415 in_dev = __in_dev_get_rcu(dev); in devinet_copy_dflt_conf()
2416 if (in_dev && !test_bit(i, in_dev->cnf.state)) in devinet_copy_dflt_conf()
2417 in_dev->cnf.data[i] = net->ipv4.devconf_dflt->data[i]; in devinet_copy_dflt_conf()
2440 struct in_device *in_dev; in inet_forward_change() local
2445 in_dev = __in_dev_get_rtnl_net(dev); in inet_forward_change()
2446 if (in_dev) { in inet_forward_change()
2447 IN_DEV_CONF_SET(in_dev, FORWARDING, on); in inet_forward_change()
2450 dev->ifindex, &in_dev->cnf); in inet_forward_change()