Lines Matching refs:net

59 	possible_net_t		net;  member
108 static struct mr6_table *ip6mr_new_table(struct net *net, u32 id);
111 static void ip6_mr_forward(struct net *net, struct mr6_table *mrt,
125 #define ip6mr_for_each_table(mrt, net) \ argument
126 list_for_each_entry_rcu(mrt, &net->ipv6.mr6_tables, list)
128 static struct mr6_table *ip6mr_get_table(struct net *net, u32 id) in ip6mr_get_table() argument
132 ip6mr_for_each_table(mrt, net) { in ip6mr_get_table()
139 static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6, in ip6mr_fib_lookup() argument
149 err = fib_rules_lookup(net->ipv6.mr6_rules_ops, in ip6mr_fib_lookup()
226 static int __net_init ip6mr_rules_init(struct net *net) in ip6mr_rules_init() argument
232 ops = fib_rules_register(&ip6mr_rules_ops_template, net); in ip6mr_rules_init()
236 INIT_LIST_HEAD(&net->ipv6.mr6_tables); in ip6mr_rules_init()
238 mrt = ip6mr_new_table(net, RT6_TABLE_DFLT); in ip6mr_rules_init()
248 net->ipv6.mr6_rules_ops = ops; in ip6mr_rules_init()
258 static void __net_exit ip6mr_rules_exit(struct net *net) in ip6mr_rules_exit() argument
263 list_for_each_entry_safe(mrt, next, &net->ipv6.mr6_tables, list) { in ip6mr_rules_exit()
267 fib_rules_unregister(net->ipv6.mr6_rules_ops); in ip6mr_rules_exit()
271 #define ip6mr_for_each_table(mrt, net) \ argument
272 for (mrt = net->ipv6.mrt6; mrt; mrt = NULL)
274 static struct mr6_table *ip6mr_get_table(struct net *net, u32 id) in ip6mr_get_table() argument
276 return net->ipv6.mrt6; in ip6mr_get_table()
279 static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6, in ip6mr_fib_lookup() argument
282 *mrt = net->ipv6.mrt6; in ip6mr_fib_lookup()
286 static int __net_init ip6mr_rules_init(struct net *net) in ip6mr_rules_init() argument
288 net->ipv6.mrt6 = ip6mr_new_table(net, RT6_TABLE_DFLT); in ip6mr_rules_init()
289 return net->ipv6.mrt6 ? 0 : -ENOMEM; in ip6mr_rules_init()
292 static void __net_exit ip6mr_rules_exit(struct net *net) in ip6mr_rules_exit() argument
295 ip6mr_free_table(net->ipv6.mrt6); in ip6mr_rules_exit()
296 net->ipv6.mrt6 = NULL; in ip6mr_rules_exit()
301 static struct mr6_table *ip6mr_new_table(struct net *net, u32 id) in ip6mr_new_table() argument
306 mrt = ip6mr_get_table(net, id); in ip6mr_new_table()
314 write_pnet(&mrt->net, net); in ip6mr_new_table()
329 list_add_tail_rcu(&mrt->list, &net->ipv6.mr6_tables); in ip6mr_new_table()
351 static struct mfc6_cache *ipmr_mfc_seq_idx(struct net *net, in ipmr_mfc_seq_idx() argument
387 static struct mif_device *ip6mr_vif_seq_idx(struct net *net, in ip6mr_vif_seq_idx() argument
406 struct net *net = seq_file_net(seq); in ip6mr_vif_seq_start() local
409 mrt = ip6mr_get_table(net, RT6_TABLE_DFLT); in ip6mr_vif_seq_start()
416 return *pos ? ip6mr_vif_seq_idx(net, seq->private, *pos - 1) in ip6mr_vif_seq_start()
423 struct net *net = seq_file_net(seq); in ip6mr_vif_seq_next() local
428 return ip6mr_vif_seq_idx(net, iter, 0); in ip6mr_vif_seq_next()
490 struct net *net = seq_file_net(seq); in ipmr_mfc_seq_start() local
493 mrt = ip6mr_get_table(net, RT6_TABLE_DFLT); in ipmr_mfc_seq_start()
498 return *pos ? ipmr_mfc_seq_idx(net, seq->private, *pos - 1) in ipmr_mfc_seq_start()
506 struct net *net = seq_file_net(seq); in ipmr_mfc_seq_next() local
512 return ipmr_mfc_seq_idx(net, seq->private, 0); in ipmr_mfc_seq_next()
627 struct net *net = dev_net(skb->dev); in pim6_rcv() local
656 if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0) in pim6_rcv()
696 struct net *net = dev_net(dev); in reg_vif_xmit() local
705 err = ip6mr_fib_lookup(net, &fl6, &mrt); in reg_vif_xmit()
740 static struct net_device *ip6mr_reg_vif(struct net *net, struct mr6_table *mrt) in ip6mr_reg_vif() argument
754 dev_net_set(dev, net); in ip6mr_reg_vif()
841 struct net *net = read_pnet(&mrt->net); in ip6mr_destroy_unres() local
853 rtnl_unicast(skb, net, NETLINK_CB(skb).portid); in ip6mr_destroy_unres()
926 static int mif6_add(struct net *net, struct mr6_table *mrt, in mif6_add() argument
948 dev = ip6mr_reg_vif(net, mrt); in mif6_add()
960 dev = dev_get_by_index(net, vifc->mif6c_pifi); in mif6_add()
1095 static void ip6mr_cache_resolve(struct net *net, struct mr6_table *mrt, in ip6mr_cache_resolve() argument
1116 rtnl_unicast(skb, net, NETLINK_CB(skb).portid); in ip6mr_cache_resolve()
1118 ip6_mr_forward(net, mrt, skb, c); in ip6mr_cache_resolve()
1328 struct net *net = dev_net(dev); in ip6mr_device_event() local
1337 ip6mr_for_each_table(mrt, net) { in ip6mr_device_event()
1357 static int __net_init ip6mr_net_init(struct net *net) in ip6mr_net_init() argument
1361 err = ip6mr_rules_init(net); in ip6mr_net_init()
1367 if (!proc_create("ip6_mr_vif", 0, net->proc_net, &ip6mr_vif_fops)) in ip6mr_net_init()
1369 if (!proc_create("ip6_mr_cache", 0, net->proc_net, &ip6mr_mfc_fops)) in ip6mr_net_init()
1377 remove_proc_entry("ip6_mr_vif", net->proc_net); in ip6mr_net_init()
1379 ip6mr_rules_exit(net); in ip6mr_net_init()
1385 static void __net_exit ip6mr_net_exit(struct net *net) in ip6mr_net_exit() argument
1388 remove_proc_entry("ip6_mr_cache", net->proc_net); in ip6mr_net_exit()
1389 remove_proc_entry("ip6_mr_vif", net->proc_net); in ip6mr_net_exit()
1391 ip6mr_rules_exit(net); in ip6mr_net_exit()
1449 static int ip6mr_mfc_add(struct net *net, struct mr6_table *mrt, in ip6mr_mfc_add() argument
1530 ip6mr_cache_resolve(net, mrt, uc, c); in ip6mr_mfc_add()
1587 struct net *net = sock_net(sk); in ip6mr_sk_init() local
1593 net->ipv6.devconf_all->mc_forwarding++; in ip6mr_sk_init()
1594 inet6_netconf_notify_devconf(net, NETCONFA_MC_FORWARDING, in ip6mr_sk_init()
1596 net->ipv6.devconf_all); in ip6mr_sk_init()
1610 struct net *net = sock_net(sk); in ip6mr_sk_done() local
1614 ip6mr_for_each_table(mrt, net) { in ip6mr_sk_done()
1618 net->ipv6.devconf_all->mc_forwarding--; in ip6mr_sk_done()
1619 inet6_netconf_notify_devconf(net, in ip6mr_sk_done()
1622 net->ipv6.devconf_all); in ip6mr_sk_done()
1635 struct sock *mroute6_socket(struct net *net, struct sk_buff *skb) in mroute6_socket() argument
1644 if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0) in mroute6_socket()
1663 struct net *net = sock_net(sk); in ip6_mroute_setsockopt() local
1666 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); in ip6_mroute_setsockopt()
1671 if (sk != mrt->mroute6_sk && !ns_capable(net->user_ns, CAP_NET_ADMIN)) in ip6_mroute_setsockopt()
1696 ret = mif6_add(net, mrt, &vif, sk == mrt->mroute6_sk); in ip6_mroute_setsockopt()
1729 ret = ip6mr_mfc_add(net, mrt, &mfc, in ip6_mroute_setsockopt()
1787 if (!ip6mr_new_table(net, v)) in ip6_mroute_setsockopt()
1812 struct net *net = sock_net(sk); in ip6_mroute_getsockopt() local
1815 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); in ip6_mroute_getsockopt()
1859 struct net *net = sock_net(sk); in ip6mr_ioctl() local
1862 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); in ip6mr_ioctl()
1933 struct net *net = sock_net(sk); in ip6mr_compat_ioctl() local
1936 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); in ip6mr_compat_ioctl()
1985 static inline int ip6mr_forward2_finish(struct net *net, struct sock *sk, struct sk_buff *skb) in ip6mr_forward2_finish() argument
1987 IP6_INC_STATS_BH(net, ip6_dst_idev(skb_dst(skb)), in ip6mr_forward2_finish()
1989 IP6_ADD_STATS_BH(net, ip6_dst_idev(skb_dst(skb)), in ip6mr_forward2_finish()
1991 return dst_output(net, sk, skb); in ip6mr_forward2_finish()
1998 static int ip6mr_forward2(struct net *net, struct mr6_table *mrt, in ip6mr_forward2() argument
2028 dst = ip6_route_output(net, NULL, &fl6); in ip6mr_forward2()
2064 net, NULL, skb, skb->dev, dev, in ip6mr_forward2()
2083 static void ip6_mr_forward(struct net *net, struct mr6_table *mrt, in ip6_mr_forward() argument
2157 ip6mr_forward2(net, mrt, skb2, cache, psend); in ip6_mr_forward()
2164 ip6mr_forward2(net, mrt, skb, cache, psend); in ip6_mr_forward()
2180 struct net *net = dev_net(skb->dev); in ip6_mr_input() local
2188 err = ip6mr_fib_lookup(net, &fl6, &mrt); in ip6_mr_input()
2224 ip6_mr_forward(net, mrt, skb, cache); in ip6_mr_input()
2278 int ip6mr_get_route(struct net *net, in ip6mr_get_route() argument
2286 mrt = ip6mr_get_table(net, RT6_TABLE_DFLT); in ip6mr_get_route()
2423 struct net *net = read_pnet(&mrt->net); in mr6_netlink_event() local
2436 rtnl_notify(skb, net, 0, RTNLGRP_IPV6_MROUTE, NULL, GFP_ATOMIC); in mr6_netlink_event()
2442 rtnl_set_sk_err(net, RTNLGRP_IPV6_MROUTE, err); in mr6_netlink_event()
2447 struct net *net = sock_net(skb->sk); in ip6mr_rtm_dumproute() local
2459 ip6mr_for_each_table(mrt, net) { in ip6mr_rtm_dumproute()