Lines Matching refs:in_dev

198 static void inet_del_ifa(struct in_device *in_dev,
254 struct in_device *in_dev;
259 in_dev = kzalloc(sizeof(*in_dev), GFP_KERNEL);
260 if (!in_dev)
262 memcpy(&in_dev->cnf, dev_net(dev)->ipv4.devconf_dflt,
263 sizeof(in_dev->cnf));
264 in_dev->cnf.sysctl = NULL;
265 in_dev->dev = dev;
266 in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl);
267 if (!in_dev->arp_parms)
269 if (IPV4_DEVCONF(in_dev->cnf, FORWARDING))
271 /* Reference in_dev->dev */
274 refcount_set(&in_dev->refcnt, 1);
276 err = devinet_sysctl_register(in_dev);
278 in_dev->dead = 1;
279 neigh_parms_release(&arp_tbl, in_dev->arp_parms);
280 in_dev_put(in_dev);
281 in_dev = NULL;
284 ip_mc_init_dev(in_dev);
286 ip_mc_up(in_dev);
289 rcu_assign_pointer(dev->ip_ptr, in_dev);
291 return in_dev ?: ERR_PTR(err);
293 kfree(in_dev);
294 in_dev = NULL;
304 static void inetdev_destroy(struct in_device *in_dev)
311 dev = in_dev->dev;
313 in_dev->dead = 1;
315 ip_mc_destroy_dev(in_dev);
317 while ((ifa = rtnl_dereference(in_dev->ifa_list)) != NULL) {
318 inet_del_ifa(in_dev, &in_dev->ifa_list, 0);
324 devinet_sysctl_unregister(in_dev);
325 neigh_parms_release(&arp_tbl, in_dev->arp_parms);
328 call_rcu(&in_dev->rcu_head, in_dev_rcu_put);
331 int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b)
336 in_dev_for_each_ifa_rcu(ifa, in_dev) {
348 static void __inet_del_ifa(struct in_device *in_dev,
356 int do_promote = IN_DEV_PROMOTE_SECONDARIES(in_dev);
362 if (in_dev->dead)
461 static void inet_del_ifa(struct in_device *in_dev,
465 __inet_del_ifa(in_dev, ifap, destroy, NULL, 0);
476 struct in_device *in_dev = ifa->ifa_dev;
489 last_primary = &in_dev->ifa_list;
494 ifap = &in_dev->ifa_list;
544 inet_hash_insert(dev_net(in_dev->dev), ifa);
565 struct in_device *in_dev = __in_dev_get_rtnl(dev);
569 if (!in_dev) {
573 ipv4_devconf_setall(in_dev);
574 neigh_parms_data_state_setall(in_dev->arp_parms);
575 if (ifa->ifa_dev != in_dev) {
577 in_dev_hold(in_dev);
578 ifa->ifa_dev = in_dev;
591 struct in_device *in_dev = NULL;
596 in_dev = rcu_dereference_rtnl(dev->ip_ptr);
598 return in_dev;
604 struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix,
611 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
650 struct in_device *in_dev;
664 in_dev = inetdev_by_index(net, ifm->ifa_index);
665 if (!in_dev) {
670 for (ifap = &in_dev->ifa_list; (ifa = rtnl_dereference(*ifap)) != NULL;
686 __inet_del_ifa(in_dev, ifap, 1, nlh, NETLINK_CB(skb).portid);
831 struct in_device *in_dev;
849 in_dev = __in_dev_get_rtnl(dev);
851 if (!in_dev)
862 ipv4_devconf_setall(in_dev);
863 neigh_parms_data_state_setall(in_dev->arp_parms);
864 in_dev_hold(in_dev);
875 ifa->ifa_dev = in_dev;
913 struct in_device *in_dev = ifa->ifa_dev;
919 in_dev_for_each_ifa_rtnl(ifa1, in_dev) {
1014 struct in_device *in_dev;
1077 in_dev = __in_dev_get_rtnl(dev);
1078 if (in_dev) {
1086 for (ifap = &in_dev->ifa_list;
1100 for (ifap = &in_dev->ifa_list;
1140 inet_del_ifa(in_dev, ifap, 1);
1165 inet_del_ifa(in_dev, ifap, 0);
1190 inet_del_ifa(in_dev, ifap, 0);
1204 inet_del_ifa(in_dev, ifap, 0);
1220 inet_del_ifa(in_dev, ifap, 0);
1249 struct in_device *in_dev = __in_dev_get_rtnl(dev);
1257 if (!in_dev)
1260 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1285 static __be32 in_dev_select_addr(const struct in_device *in_dev,
1290 in_dev_for_each_ifa_rcu(ifa, in_dev) {
1306 struct in_device *in_dev;
1311 in_dev = __in_dev_get_rcu(dev);
1312 if (!in_dev)
1315 if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev)))
1318 in_dev_for_each_ifa_rcu(ifa, in_dev) {
1343 (in_dev = __in_dev_get_rcu(dev))) {
1344 addr = in_dev_select_addr(in_dev, scope);
1357 in_dev = __in_dev_get_rcu(dev);
1358 if (!in_dev)
1361 addr = in_dev_select_addr(in_dev, scope);
1371 static __be32 confirm_addr_indev(struct in_device *in_dev, __be32 dst,
1379 if (unlikely(IN_DEV_ROUTE_LOCALNET(in_dev)))
1382 in_dev_for_each_ifa_rcu(ifa, in_dev) {
1418 * - in_dev: only on this interface, NULL=any interface
1423 __be32 inet_confirm_addr(struct net *net, struct in_device *in_dev,
1429 if (in_dev)
1430 return confirm_addr_indev(in_dev, dst, local, scope);
1434 in_dev = __in_dev_get_rcu(dev);
1435 if (in_dev) {
1436 addr = confirm_addr_indev(in_dev, dst, local, scope);
1479 static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
1484 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1506 struct in_device *in_dev)
1511 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1525 struct in_device *in_dev = __in_dev_get_rtnl(dev);
1529 if (!in_dev) {
1531 in_dev = inetdev_init(dev);
1532 if (IS_ERR(in_dev))
1533 return notifier_from_errno(PTR_ERR(in_dev));
1535 IN_DEV_CONF_SET(in_dev, NOXFRM, 1);
1536 IN_DEV_CONF_SET(in_dev, NOPOLICY, 1);
1541 in_dev = inetdev_init(dev);
1563 in_dev_hold(in_dev);
1564 ifa->ifa_dev = in_dev;
1569 ipv4_devconf_setall(in_dev);
1570 neigh_parms_data_state_setall(in_dev->arp_parms);
1574 ip_mc_up(in_dev);
1577 if (!IN_DEV_ARP_NOTIFY(in_dev))
1582 inetdev_send_gratuitous_arp(dev, in_dev);
1585 ip_mc_down(in_dev);
1588 ip_mc_unmap(in_dev);
1591 ip_mc_remap(in_dev);
1599 inetdev_destroy(in_dev);
1605 inetdev_changename(dev, in_dev);
1607 devinet_sysctl_unregister(in_dev);
1608 devinet_sysctl_register(in_dev);
1773 static int in_dev_dump_addr(struct in_device *in_dev, struct sk_buff *skb,
1781 in_dev_for_each_ifa_rtnl(ifa, in_dev) {
1817 struct in_device *in_dev;
1839 in_dev = __in_dev_get_rtnl(dev);
1840 if (in_dev) {
1841 err = in_dev_dump_addr(in_dev, skb, cb, s_ip_idx,
1859 in_dev = __in_dev_get_rcu(dev);
1860 if (!in_dev)
1863 err = in_dev_dump_addr(in_dev, skb, cb, s_ip_idx,
1921 struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr);
1923 if (!in_dev)
1932 struct in_device *in_dev = rcu_dereference_rtnl(dev->ip_ptr);
1936 if (!in_dev)
1944 ((u32 *) nla_data(nla))[i] = in_dev->cnf.data[i];
1984 struct in_device *in_dev = __in_dev_get_rcu(dev);
1988 if (!in_dev)
1996 ipv4_devconf_set(in_dev, nla_type(a), nla_get_u32(a));
2167 struct in_device *in_dev;
2192 in_dev = __in_dev_get_rtnl(dev);
2193 if (!in_dev)
2195 devconf = &in_dev->cnf;
2227 struct in_device *in_dev;
2257 in_dev = __in_dev_get_rcu(dev);
2258 if (!in_dev)
2262 &in_dev->cnf,
2314 struct in_device *in_dev;
2316 in_dev = __in_dev_get_rcu(dev);
2317 if (in_dev && !test_bit(i, in_dev->cnf.state))
2318 in_dev->cnf.data[i] = net->ipv4.devconf_dflt->data[i];
2341 struct in_device *in_dev;
2346 in_dev = __in_dev_get_rtnl(dev);
2347 if (in_dev) {
2348 IN_DEV_CONF_SET(in_dev, FORWARDING, on);
2351 dev->ifindex, &in_dev->cnf);