Lines Matching full:net

35 #include <net/flow.h>
36 #include <net/inet_dscp.h>
37 #include <net/ip.h>
38 #include <net/protocol.h>
39 #include <net/route.h>
40 #include <net/tcp.h>
41 #include <net/sock.h>
42 #include <net/arp.h>
43 #include <net/ip_fib.h>
44 #include <net/nexthop.h>
45 #include <net/rtnetlink.h>
46 #include <net/xfrm.h>
47 #include <net/l3mdev.h>
48 #include <net/lwtunnel.h>
53 static int __net_init fib4_rules_init(struct net *net)
66 &net->ipv4.fib_table_hash[TABLE_LOCAL_INDEX]);
68 &net->ipv4.fib_table_hash[TABLE_MAIN_INDEX]);
77 struct fib_table *fib_new_table(struct net *net, u32 id)
84 tb = fib_get_table(net, id);
88 if (id == RT_TABLE_LOCAL && !net->ipv4.fib_has_custom_rules)
89 alias = fib_new_table(net, RT_TABLE_MAIN);
97 rcu_assign_pointer(net->ipv4.fib_main, tb);
100 rcu_assign_pointer(net->ipv4.fib_default, tb);
107 hlist_add_head_rcu(&tb->tb_hlist, &net->ipv4.fib_table_hash[h]);
113 struct fib_table *fib_get_table(struct net *net, u32 id)
123 head = &net->ipv4.fib_table_hash[h];
133 static void fib_replace_table(struct net *net, struct fib_table *old,
139 rcu_assign_pointer(net->ipv4.fib_main, new);
142 rcu_assign_pointer(net->ipv4.fib_default, new);
153 int fib_unmerge(struct net *net)
158 old = fib_get_table(net, RT_TABLE_LOCAL);
171 fib_replace_table(net, old, new);
175 main_table = fib_get_table(net, RT_TABLE_MAIN);
185 void fib_flush(struct net *net)
191 struct hlist_head *head = &net->ipv4.fib_table_hash[h];
196 flushed += fib_table_flush(net, tb, false);
200 rt_cache_flush(net);
207 static inline unsigned int __inet_dev_addr_type(struct net *net,
223 table = fib_get_table(net, tb_id);
238 unsigned int inet_addr_type_table(struct net *net, __be32 addr, u32 tb_id)
240 return __inet_dev_addr_type(net, NULL, addr, tb_id);
244 unsigned int inet_addr_type(struct net *net, __be32 addr)
246 return __inet_dev_addr_type(net, NULL, addr, RT_TABLE_LOCAL);
250 unsigned int inet_dev_addr_type(struct net *net, const struct net_device *dev,
255 return __inet_dev_addr_type(net, dev, addr, rt_table);
262 unsigned int inet_addr_type_dev_table(struct net *net,
268 return __inet_dev_addr_type(net, NULL, addr, rt_table);
278 struct net *net;
288 net = dev_net(dev);
301 if (!fib_lookup(net, &fl4, &res, 0))
302 return fib_result_prefsrc(net, &res);
349 struct net *net = dev_net(dev);
366 fl4.flowi4_uid = sock_net_uid(net, NULL);
372 if (!fib4_rules_early_flow_dissect(net, skb, &fl4, &flkeys)) {
380 if (fib_lookup(net, &fl4, &res, 0))
398 dev == net->loopback_dev);
410 if (fib_lookup(net, &fl4, &res, FIB_LOOKUP_IGNORE_LINKSTATE) == 0) {
434 struct net *net = dev_net(dev);
436 if (!r && !fib_num_tclassid_users(net) &&
444 if (net->ipv4.fib_has_custom_local_routes ||
445 fib4_has_custom_rules(net))
450 if (inet_lookup_ifaddr_rcu(net, src))
480 static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt,
487 cfg->fc_nlinfo.nl_net = net;
548 dev = __dev_get_by_name(net, devname);
563 in_dev_for_each_ifa_rtnl_net(net, ifa, in_dev) {
580 addr_type = inet_addr_type_table(net, addr, cfg->fc_table);
626 int ip_rt_ioctl(struct net *net, unsigned int cmd, struct rtentry *rt)
634 if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
637 rtnl_net_lock(net);
638 err = rtentry_to_fib_config(net, cmd, rt, &cfg);
643 tb = fib_get_table(net, cfg.fc_table);
645 err = fib_table_delete(net, tb, &cfg,
650 tb = fib_new_table(net, cfg.fc_table);
652 err = fib_table_insert(net, tb,
661 rtnl_net_unlock(net);
734 static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,
770 cfg->fc_nlinfo.nl_net = net;
879 struct net *net = sock_net(skb->sk);
884 err = rtm_to_fib_config(net, skb, nlh, &cfg, extack);
888 rtnl_net_lock(net);
890 if (cfg.fc_nh_id && !nexthop_find_by_id(net, cfg.fc_nh_id)) {
896 tb = fib_get_table(net, cfg.fc_table);
903 err = fib_table_delete(net, tb, &cfg, extack);
905 rtnl_net_unlock(net);
913 struct net *net = sock_net(skb->sk);
918 err = rtm_to_fib_config(net, skb, nlh, &cfg, extack);
922 rtnl_net_lock(net);
924 tb = fib_new_table(net, cfg.fc_table);
930 err = fib_table_insert(net, tb, &cfg, extack);
932 net->ipv4.fib_has_custom_local_routes = true;
935 rtnl_net_unlock(net);
940 int ip_valid_fib_dump_req(struct net *net, const struct nlmsghdr *nlh,
996 filter->dev = __dev_get_by_index(net, ifindex);
998 filter->dev = dev_get_by_index_rcu(net, ifindex);
1026 struct net *net = sock_net(skb->sk);
1035 err = ip_valid_fib_dump_req(net, nlh, &filter, cb);
1049 tb = fib_get_table(net, filter.table_id);
1068 head = &net->ipv4.fib_table_hash[h];
1102 struct net *net = dev_net(ifa->ifa_dev->dev);
1115 .nl_net = net,
1122 tb = fib_new_table(net, tb_id);
1134 fib_table_insert(net, tb, &cfg, NULL);
1136 fib_table_delete(net, tb, &cfg, NULL);
1369 static void nl_fib_lookup(struct net *net, struct fib_result_nl *frn)
1383 tb = fib_get_table(net, frn->tb_id_in);
1406 struct net *net;
1411 net = sock_net(skb->sk);
1424 nl_fib_lookup(net, frn);
1429 nlmsg_unicast(net->ipv4.fibnl, skb, portid);
1432 static int __net_init nl_fib_lookup_init(struct net *net)
1439 sk = netlink_kernel_create(net, NETLINK_FIB_LOOKUP, &cfg);
1442 net->ipv4.fibnl = sk;
1446 static void nl_fib_lookup_exit(struct net *net)
1448 netlink_kernel_release(net->ipv4.fibnl);
1449 net->ipv4.fibnl = NULL;
1466 struct net *net = dev_net(dev);
1474 atomic_inc(&net->ipv4.dev_addr_genid);
1475 rt_cache_flush(net);
1479 atomic_inc(&net->ipv4.dev_addr_genid);
1486 rt_cache_flush(net);
1499 struct net *net = dev_net(dev);
1521 atomic_inc(&net->ipv4.dev_addr_genid);
1522 rt_cache_flush(net);
1533 rt_cache_flush(net);
1537 rt_cache_flush(net);
1560 static int __net_init ip_fib_net_init(struct net *net)
1565 err = fib4_notifier_init(net);
1571 net->ipv4.sysctl_fib_multipath_hash_fields =
1578 net->ipv4.fib_table_hash = kzalloc(size, GFP_KERNEL);
1579 if (!net->ipv4.fib_table_hash) {
1584 err = fib4_rules_init(net);
1590 kfree(net->ipv4.fib_table_hash);
1592 fib4_notifier_exit(net);
1596 static void ip_fib_net_exit(struct net *net)
1600 ASSERT_RTNL_NET(net);
1602 RCU_INIT_POINTER(net->ipv4.fib_main, NULL);
1603 RCU_INIT_POINTER(net->ipv4.fib_default, NULL);
1611 struct hlist_head *head = &net->ipv4.fib_table_hash[i];
1617 fib_table_flush(net, tb, true);
1623 fib4_rules_exit(net);
1626 kfree(net->ipv4.fib_table_hash);
1627 fib4_notifier_exit(net);
1630 static int __net_init fib_net_init(struct net *net)
1635 atomic_set(&net->ipv4.fib_num_tclassid_users, 0);
1637 error = ip_fib_net_init(net);
1641 error = fib4_semantics_init(net);
1645 error = nl_fib_lookup_init(net);
1649 error = fib_proc_init(net);
1656 nl_fib_lookup_exit(net);
1658 fib4_semantics_exit(net);
1660 rtnl_net_lock(net);
1661 ip_fib_net_exit(net);
1662 rtnl_net_unlock(net);
1666 static void __net_exit fib_net_exit(struct net *net)
1668 fib_proc_exit(net);
1669 nl_fib_lookup_exit(net);
1674 struct net *net;
1677 list_for_each_entry(net, net_list, exit_list) {
1678 __rtnl_net_lock(net);
1679 ip_fib_net_exit(net);
1680 __rtnl_net_unlock(net);
1684 list_for_each_entry(net, net_list, exit_list)
1685 fib4_semantics_exit(net);