Lines Matching refs:in_dev
201 static void inet_del_ifa(struct in_device *in_dev,
264 struct in_device *in_dev;
269 in_dev = kzalloc(sizeof(*in_dev), GFP_KERNEL);
270 if (!in_dev)
272 memcpy(&in_dev->cnf, dev_net(dev)->ipv4.devconf_dflt,
273 sizeof(in_dev->cnf));
274 in_dev->cnf.sysctl = NULL;
275 in_dev->dev = dev;
276 in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl);
277 if (!in_dev->arp_parms)
279 if (IPV4_DEVCONF(in_dev->cnf, FORWARDING))
281 /* Reference in_dev->dev */
282 netdev_hold(dev, &in_dev->dev_tracker, GFP_KERNEL);
284 refcount_set(&in_dev->refcnt, 1);
286 err = devinet_sysctl_register(in_dev);
288 in_dev->dead = 1;
289 neigh_parms_release(&arp_tbl, in_dev->arp_parms);
290 in_dev_put(in_dev);
291 in_dev = NULL;
294 ip_mc_init_dev(in_dev);
296 ip_mc_up(in_dev);
299 rcu_assign_pointer(dev->ip_ptr, in_dev);
301 return in_dev ?: ERR_PTR(err);
303 kfree(in_dev);
304 in_dev = NULL;
308 static void inetdev_destroy(struct in_device *in_dev)
315 dev = in_dev->dev;
317 in_dev->dead = 1;
319 ip_mc_destroy_dev(in_dev);
321 while ((ifa = rtnl_dereference(in_dev->ifa_list)) != NULL) {
322 inet_del_ifa(in_dev, &in_dev->ifa_list, 0);
328 devinet_sysctl_unregister(in_dev);
329 neigh_parms_release(&arp_tbl, in_dev->arp_parms);
332 in_dev_put(in_dev);
335 int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b)
340 in_dev_for_each_ifa_rcu(ifa, in_dev) {
352 static void __inet_del_ifa(struct in_device *in_dev,
360 int do_promote = IN_DEV_PROMOTE_SECONDARIES(in_dev);
366 if (in_dev->dead)
465 static void inet_del_ifa(struct in_device *in_dev,
469 __inet_del_ifa(in_dev, ifap, destroy, NULL, 0);
480 struct in_device *in_dev = ifa->ifa_dev;
493 last_primary = &in_dev->ifa_list;
498 ifap = &in_dev->ifa_list;
547 inet_hash_insert(dev_net(in_dev->dev), ifa);
568 struct in_device *in_dev = __in_dev_get_rtnl(dev);
572 if (!in_dev) {
576 ipv4_devconf_setall(in_dev);
577 neigh_parms_data_state_setall(in_dev->arp_parms);
578 if (ifa->ifa_dev != in_dev) {
580 in_dev_hold(in_dev);
581 ifa->ifa_dev = in_dev;
594 struct in_device *in_dev = NULL;
599 in_dev = rcu_dereference_rtnl(dev->ip_ptr);
601 return in_dev;
607 struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix,
614 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
653 struct in_device *in_dev;
666 in_dev = inetdev_by_index(net, ifm->ifa_index);
667 if (!in_dev) {
673 for (ifap = &in_dev->ifa_list; (ifa = rtnl_dereference(*ifap)) != NULL;
689 __inet_del_ifa(in_dev, ifap, 1, nlh, NETLINK_CB(skb).portid);
835 struct in_device *in_dev;
863 in_dev = __in_dev_get_rtnl(dev);
865 if (!in_dev)
876 ipv4_devconf_setall(in_dev);
877 neigh_parms_data_state_setall(in_dev->arp_parms);
878 in_dev_hold(in_dev);
889 ifa->ifa_dev = in_dev;
931 struct in_device *in_dev = ifa->ifa_dev;
937 in_dev_for_each_ifa_rtnl(ifa1, in_dev) {
1038 struct in_device *in_dev;
1101 in_dev = __in_dev_get_rtnl(dev);
1102 if (in_dev) {
1110 for (ifap = &in_dev->ifa_list;
1124 for (ifap = &in_dev->ifa_list;
1164 inet_del_ifa(in_dev, ifap, 1);
1189 inet_del_ifa(in_dev, ifap, 0);
1214 inet_del_ifa(in_dev, ifap, 0);
1228 inet_del_ifa(in_dev, ifap, 0);
1244 inet_del_ifa(in_dev, ifap, 0);
1273 struct in_device *in_dev = __in_dev_get_rtnl(dev);
1281 if (!in_dev)
1284 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1309 static __be32 in_dev_select_addr(const struct in_device *in_dev,
1314 in_dev_for_each_ifa_rcu(ifa, in_dev) {
1330 struct in_device *in_dev;
1335 in_dev = __in_dev_get_rcu(dev);
1336 if (!in_dev)
1339 if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev)))
1342 in_dev_for_each_ifa_rcu(ifa, in_dev) {
1367 (in_dev = __in_dev_get_rcu(dev))) {
1368 addr = in_dev_select_addr(in_dev, scope);
1381 in_dev = __in_dev_get_rcu(dev);
1382 if (!in_dev)
1385 addr = in_dev_select_addr(in_dev, scope);
1395 static __be32 confirm_addr_indev(struct in_device *in_dev, __be32 dst,
1403 if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev)))
1406 in_dev_for_each_ifa_rcu(ifa, in_dev) {
1442 * - in_dev: only on this interface, NULL=any interface
1447 __be32 inet_confirm_addr(struct net *net, struct in_device *in_dev,
1453 if (in_dev)
1454 return confirm_addr_indev(in_dev, dst, local, scope);
1458 in_dev = __in_dev_get_rcu(dev);
1459 if (in_dev) {
1460 addr = confirm_addr_indev(in_dev, dst, local, scope);
1503 static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
1508 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1530 struct in_device *in_dev)
1535 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1549 struct in_device *in_dev = __in_dev_get_rtnl(dev);
1553 if (!in_dev) {
1555 in_dev = inetdev_init(dev);
1556 if (IS_ERR(in_dev))
1557 return notifier_from_errno(PTR_ERR(in_dev));
1559 IN_DEV_CONF_SET(in_dev, NOXFRM, 1);
1560 IN_DEV_CONF_SET(in_dev, NOPOLICY, 1);
1565 in_dev = inetdev_init(dev);
1587 in_dev_hold(in_dev);
1588 ifa->ifa_dev = in_dev;
1593 ipv4_devconf_setall(in_dev);
1594 neigh_parms_data_state_setall(in_dev->arp_parms);
1598 ip_mc_up(in_dev);
1601 if (!IN_DEV_ARP_NOTIFY(in_dev))
1606 inetdev_send_gratuitous_arp(dev, in_dev);
1609 ip_mc_down(in_dev);
1612 ip_mc_unmap(in_dev);
1615 ip_mc_remap(in_dev);
1623 inetdev_destroy(in_dev);
1629 inetdev_changename(dev, in_dev);
1631 devinet_sysctl_unregister(in_dev);
1632 devinet_sysctl_register(in_dev);
1800 static int in_dev_dump_addr(struct in_device *in_dev, struct sk_buff *skb,
1808 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1859 struct in_device *in_dev;
1881 in_dev = __in_dev_get_rtnl(dev);
1882 if (in_dev) {
1883 err = in_dev_dump_addr(in_dev, skb, cb, s_ip_idx,
1900 in_dev = __in_dev_get_rcu(dev);
1901 if (!in_dev)
1904 err = in_dev_dump_addr(in_dev, skb, cb, s_ip_idx,
1962 struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr);
1964 if (!in_dev)
1973 struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr);
1977 if (!in_dev)
1985 ((u32 *) nla_data(nla))[i] = in_dev->cnf.data[i];
2027 struct in_device *in_dev = __in_dev_get_rtnl(dev);
2031 if (!in_dev)
2039 ipv4_devconf_set(in_dev, nla_type(a), nla_get_u32(a));
2210 struct in_device *in_dev;
2235 in_dev = __in_dev_get_rtnl(dev);
2236 if (!in_dev)
2238 devconf = &in_dev->cnf;
2270 struct in_device *in_dev;
2299 in_dev = __in_dev_get_rcu(dev);
2300 if (!in_dev)
2304 &in_dev->cnf,
2356 struct in_device *in_dev;
2358 in_dev = __in_dev_get_rcu(dev);
2359 if (in_dev && !test_bit(i, in_dev->cnf.state))
2360 in_dev->cnf.data[i] = net->ipv4.devconf_dflt->data[i];
2383 struct in_device *in_dev;
2388 in_dev = __in_dev_get_rtnl(dev);
2389 if (in_dev) {
2390 IN_DEV_CONF_SET(in_dev, FORWARDING, on);
2393 dev->ifindex, &in_dev->cnf);