Lines Matching refs:net

52 static int __net_init fib4_rules_init(struct net *net)  in fib4_rules_init()  argument
65 &net->ipv4.fib_table_hash[TABLE_LOCAL_INDEX]); in fib4_rules_init()
67 &net->ipv4.fib_table_hash[TABLE_MAIN_INDEX]); in fib4_rules_init()
76 struct fib_table *fib_new_table(struct net *net, u32 id) in fib_new_table() argument
83 tb = fib_get_table(net, id); in fib_new_table()
87 if (id == RT_TABLE_LOCAL && !net->ipv4.fib_has_custom_rules) in fib_new_table()
88 alias = fib_new_table(net, RT_TABLE_MAIN); in fib_new_table()
96 rcu_assign_pointer(net->ipv4.fib_main, tb); in fib_new_table()
99 rcu_assign_pointer(net->ipv4.fib_default, tb); in fib_new_table()
106 hlist_add_head_rcu(&tb->tb_hlist, &net->ipv4.fib_table_hash[h]); in fib_new_table()
112 struct fib_table *fib_get_table(struct net *net, u32 id) in fib_get_table() argument
122 head = &net->ipv4.fib_table_hash[h]; in fib_get_table()
132 static void fib_replace_table(struct net *net, struct fib_table *old, in fib_replace_table() argument
138 rcu_assign_pointer(net->ipv4.fib_main, new); in fib_replace_table()
141 rcu_assign_pointer(net->ipv4.fib_default, new); in fib_replace_table()
152 int fib_unmerge(struct net *net) in fib_unmerge() argument
157 old = fib_get_table(net, RT_TABLE_LOCAL); in fib_unmerge()
170 fib_replace_table(net, old, new); in fib_unmerge()
174 main_table = fib_get_table(net, RT_TABLE_MAIN); in fib_unmerge()
184 void fib_flush(struct net *net) in fib_flush() argument
190 struct hlist_head *head = &net->ipv4.fib_table_hash[h]; in fib_flush()
195 flushed += fib_table_flush(net, tb, false); in fib_flush()
199 rt_cache_flush(net); in fib_flush()
206 static inline unsigned int __inet_dev_addr_type(struct net *net, in __inet_dev_addr_type() argument
222 table = fib_get_table(net, tb_id); in __inet_dev_addr_type()
237 unsigned int inet_addr_type_table(struct net *net, __be32 addr, u32 tb_id) in inet_addr_type_table() argument
239 return __inet_dev_addr_type(net, NULL, addr, tb_id); in inet_addr_type_table()
243 unsigned int inet_addr_type(struct net *net, __be32 addr) in inet_addr_type() argument
245 return __inet_dev_addr_type(net, NULL, addr, RT_TABLE_LOCAL); in inet_addr_type()
249 unsigned int inet_dev_addr_type(struct net *net, const struct net_device *dev, in inet_dev_addr_type() argument
254 return __inet_dev_addr_type(net, dev, addr, rt_table); in inet_dev_addr_type()
261 unsigned int inet_addr_type_dev_table(struct net *net, in inet_addr_type_dev_table() argument
267 return __inet_dev_addr_type(net, NULL, addr, rt_table); in inet_addr_type_dev_table()
277 struct net *net; in fib_compute_spec_dst() local
287 net = dev_net(dev); in fib_compute_spec_dst()
300 if (!fib_lookup(net, &fl4, &res, 0)) in fib_compute_spec_dst()
301 return fib_result_prefsrc(net, &res); in fib_compute_spec_dst()
348 struct net *net = dev_net(dev); in __fib_validate_source() local
365 fl4.flowi4_uid = sock_net_uid(net, NULL); in __fib_validate_source()
371 if (!fib4_rules_early_flow_dissect(net, skb, &fl4, &flkeys)) { in __fib_validate_source()
379 if (fib_lookup(net, &fl4, &res, 0)) in __fib_validate_source()
397 dev == net->loopback_dev); in __fib_validate_source()
409 if (fib_lookup(net, &fl4, &res, FIB_LOOKUP_IGNORE_LINKSTATE) == 0) { in __fib_validate_source()
433 struct net *net = dev_net(dev); in fib_validate_source() local
435 if (!r && !fib_num_tclassid_users(net) && in fib_validate_source()
443 if (net->ipv4.fib_has_custom_local_routes || in fib_validate_source()
444 fib4_has_custom_rules(net)) in fib_validate_source()
449 if (inet_lookup_ifaddr_rcu(net, src)) in fib_validate_source()
479 static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt, in rtentry_to_fib_config() argument
486 cfg->fc_nlinfo.nl_net = net; in rtentry_to_fib_config()
547 dev = __dev_get_by_name(net, devname); in rtentry_to_fib_config()
562 in_dev_for_each_ifa_rtnl_net(net, ifa, in_dev) { in rtentry_to_fib_config()
579 addr_type = inet_addr_type_table(net, addr, cfg->fc_table); in rtentry_to_fib_config()
625 int ip_rt_ioctl(struct net *net, unsigned int cmd, struct rtentry *rt) in ip_rt_ioctl() argument
633 if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) in ip_rt_ioctl()
636 rtnl_net_lock(net); in ip_rt_ioctl()
637 err = rtentry_to_fib_config(net, cmd, rt, &cfg); in ip_rt_ioctl()
642 tb = fib_get_table(net, cfg.fc_table); in ip_rt_ioctl()
644 err = fib_table_delete(net, tb, &cfg, in ip_rt_ioctl()
649 tb = fib_new_table(net, cfg.fc_table); in ip_rt_ioctl()
651 err = fib_table_insert(net, tb, in ip_rt_ioctl()
660 rtnl_net_unlock(net); in ip_rt_ioctl()
733 static int rtm_to_fib_config(struct net *net, struct sk_buff *skb, in rtm_to_fib_config() argument
769 cfg->fc_nlinfo.nl_net = net; in rtm_to_fib_config()
878 struct net *net = sock_net(skb->sk); in inet_rtm_delroute() local
883 err = rtm_to_fib_config(net, skb, nlh, &cfg, extack); in inet_rtm_delroute()
887 rtnl_net_lock(net); in inet_rtm_delroute()
889 if (cfg.fc_nh_id && !nexthop_find_by_id(net, cfg.fc_nh_id)) { in inet_rtm_delroute()
895 tb = fib_get_table(net, cfg.fc_table); in inet_rtm_delroute()
902 err = fib_table_delete(net, tb, &cfg, extack); in inet_rtm_delroute()
904 rtnl_net_unlock(net); in inet_rtm_delroute()
912 struct net *net = sock_net(skb->sk); in inet_rtm_newroute() local
917 err = rtm_to_fib_config(net, skb, nlh, &cfg, extack); in inet_rtm_newroute()
921 rtnl_net_lock(net); in inet_rtm_newroute()
923 tb = fib_new_table(net, cfg.fc_table); in inet_rtm_newroute()
929 err = fib_table_insert(net, tb, &cfg, extack); in inet_rtm_newroute()
931 net->ipv4.fib_has_custom_local_routes = true; in inet_rtm_newroute()
934 rtnl_net_unlock(net); in inet_rtm_newroute()
939 int ip_valid_fib_dump_req(struct net *net, const struct nlmsghdr *nlh, in ip_valid_fib_dump_req() argument
995 filter->dev = __dev_get_by_index(net, ifindex); in ip_valid_fib_dump_req()
997 filter->dev = dev_get_by_index_rcu(net, ifindex); in ip_valid_fib_dump_req()
1025 struct net *net = sock_net(skb->sk); in inet_dump_fib() local
1034 err = ip_valid_fib_dump_req(net, nlh, &filter, cb); in inet_dump_fib()
1048 tb = fib_get_table(net, filter.table_id); in inet_dump_fib()
1067 head = &net->ipv4.fib_table_hash[h]; in inet_dump_fib()
1101 struct net *net = dev_net(ifa->ifa_dev->dev); in fib_magic() local
1114 .nl_net = net, in fib_magic()
1121 tb = fib_new_table(net, tb_id); in fib_magic()
1133 fib_table_insert(net, tb, &cfg, NULL); in fib_magic()
1135 fib_table_delete(net, tb, &cfg, NULL); in fib_magic()
1368 static void nl_fib_lookup(struct net *net, struct fib_result_nl *frn) in nl_fib_lookup() argument
1382 tb = fib_get_table(net, frn->tb_id_in); in nl_fib_lookup()
1405 struct net *net; in nl_fib_input() local
1410 net = sock_net(skb->sk); in nl_fib_input()
1423 nl_fib_lookup(net, frn); in nl_fib_input()
1428 nlmsg_unicast(net->ipv4.fibnl, skb, portid); in nl_fib_input()
1431 static int __net_init nl_fib_lookup_init(struct net *net) in nl_fib_lookup_init() argument
1438 sk = netlink_kernel_create(net, NETLINK_FIB_LOOKUP, &cfg); in nl_fib_lookup_init()
1441 net->ipv4.fibnl = sk; in nl_fib_lookup_init()
1445 static void nl_fib_lookup_exit(struct net *net) in nl_fib_lookup_exit() argument
1447 netlink_kernel_release(net->ipv4.fibnl); in nl_fib_lookup_exit()
1448 net->ipv4.fibnl = NULL; in nl_fib_lookup_exit()
1465 struct net *net = dev_net(dev); in fib_inetaddr_event() local
1473 atomic_inc(&net->ipv4.dev_addr_genid); in fib_inetaddr_event()
1474 rt_cache_flush(net); in fib_inetaddr_event()
1478 atomic_inc(&net->ipv4.dev_addr_genid); in fib_inetaddr_event()
1485 rt_cache_flush(net); in fib_inetaddr_event()
1498 struct net *net = dev_net(dev); in fib_netdev_event() local
1520 atomic_inc(&net->ipv4.dev_addr_genid); in fib_netdev_event()
1521 rt_cache_flush(net); in fib_netdev_event()
1532 rt_cache_flush(net); in fib_netdev_event()
1536 rt_cache_flush(net); in fib_netdev_event()
1559 static int __net_init ip_fib_net_init(struct net *net) in ip_fib_net_init() argument
1564 err = fib4_notifier_init(net); in ip_fib_net_init()
1570 net->ipv4.sysctl_fib_multipath_hash_fields = in ip_fib_net_init()
1577 net->ipv4.fib_table_hash = kzalloc(size, GFP_KERNEL); in ip_fib_net_init()
1578 if (!net->ipv4.fib_table_hash) { in ip_fib_net_init()
1583 err = fib4_rules_init(net); in ip_fib_net_init()
1589 kfree(net->ipv4.fib_table_hash); in ip_fib_net_init()
1591 fib4_notifier_exit(net); in ip_fib_net_init()
1595 static void ip_fib_net_exit(struct net *net) in ip_fib_net_exit() argument
1599 ASSERT_RTNL_NET(net); in ip_fib_net_exit()
1601 RCU_INIT_POINTER(net->ipv4.fib_main, NULL); in ip_fib_net_exit()
1602 RCU_INIT_POINTER(net->ipv4.fib_default, NULL); in ip_fib_net_exit()
1610 struct hlist_head *head = &net->ipv4.fib_table_hash[i]; in ip_fib_net_exit()
1616 fib_table_flush(net, tb, true); in ip_fib_net_exit()
1622 fib4_rules_exit(net); in ip_fib_net_exit()
1625 kfree(net->ipv4.fib_table_hash); in ip_fib_net_exit()
1626 fib4_notifier_exit(net); in ip_fib_net_exit()
1629 static int __net_init fib_net_init(struct net *net) in fib_net_init() argument
1634 atomic_set(&net->ipv4.fib_num_tclassid_users, 0); in fib_net_init()
1636 error = ip_fib_net_init(net); in fib_net_init()
1640 error = fib4_semantics_init(net); in fib_net_init()
1644 error = nl_fib_lookup_init(net); in fib_net_init()
1648 error = fib_proc_init(net); in fib_net_init()
1655 nl_fib_lookup_exit(net); in fib_net_init()
1657 fib4_semantics_exit(net); in fib_net_init()
1659 rtnl_net_lock(net); in fib_net_init()
1660 ip_fib_net_exit(net); in fib_net_init()
1661 rtnl_net_unlock(net); in fib_net_init()
1665 static void __net_exit fib_net_exit(struct net *net) in fib_net_exit() argument
1667 fib_proc_exit(net); in fib_net_exit()
1668 nl_fib_lookup_exit(net); in fib_net_exit()
1673 struct net *net; in fib_net_exit_batch() local
1676 list_for_each_entry(net, net_list, exit_list) { in fib_net_exit_batch()
1677 __rtnl_net_lock(net); in fib_net_exit_batch()
1678 ip_fib_net_exit(net); in fib_net_exit_batch()
1679 __rtnl_net_unlock(net); in fib_net_exit_batch()
1683 list_for_each_entry(net, net_list, exit_list) in fib_net_exit_batch()
1684 fib4_semantics_exit(net); in fib_net_exit_batch()