Lines Matching refs:net
76 possible_net_t net; member
125 static struct mr_table *ipmr_new_table(struct net *net, u32 id);
128 static void ip_mr_forward(struct net *net, struct mr_table *mrt,
141 #define ipmr_for_each_table(mrt, net) \ argument
142 list_for_each_entry_rcu(mrt, &net->ipv4.mr_tables, list)
144 static struct mr_table *ipmr_get_table(struct net *net, u32 id) in ipmr_get_table() argument
148 ipmr_for_each_table(mrt, net) { in ipmr_get_table()
155 static int ipmr_fib_lookup(struct net *net, struct flowi4 *flp4, in ipmr_fib_lookup() argument
165 err = fib_rules_lookup(net->ipv4.mr_rules_ops, in ipmr_fib_lookup()
242 static int __net_init ipmr_rules_init(struct net *net) in ipmr_rules_init() argument
248 ops = fib_rules_register(&ipmr_rules_ops_template, net); in ipmr_rules_init()
252 INIT_LIST_HEAD(&net->ipv4.mr_tables); in ipmr_rules_init()
254 mrt = ipmr_new_table(net, RT_TABLE_DEFAULT); in ipmr_rules_init()
264 net->ipv4.mr_rules_ops = ops; in ipmr_rules_init()
274 static void __net_exit ipmr_rules_exit(struct net *net) in ipmr_rules_exit() argument
279 list_for_each_entry_safe(mrt, next, &net->ipv4.mr_tables, list) { in ipmr_rules_exit()
283 fib_rules_unregister(net->ipv4.mr_rules_ops); in ipmr_rules_exit()
287 #define ipmr_for_each_table(mrt, net) \ argument
288 for (mrt = net->ipv4.mrt; mrt; mrt = NULL)
290 static struct mr_table *ipmr_get_table(struct net *net, u32 id) in ipmr_get_table() argument
292 return net->ipv4.mrt; in ipmr_get_table()
295 static int ipmr_fib_lookup(struct net *net, struct flowi4 *flp4, in ipmr_fib_lookup() argument
298 *mrt = net->ipv4.mrt; in ipmr_fib_lookup()
302 static int __net_init ipmr_rules_init(struct net *net) in ipmr_rules_init() argument
304 net->ipv4.mrt = ipmr_new_table(net, RT_TABLE_DEFAULT); in ipmr_rules_init()
305 return net->ipv4.mrt ? 0 : -ENOMEM; in ipmr_rules_init()
308 static void __net_exit ipmr_rules_exit(struct net *net) in ipmr_rules_exit() argument
311 ipmr_free_table(net->ipv4.mrt); in ipmr_rules_exit()
312 net->ipv4.mrt = NULL; in ipmr_rules_exit()
317 static struct mr_table *ipmr_new_table(struct net *net, u32 id) in ipmr_new_table() argument
322 mrt = ipmr_get_table(net, id); in ipmr_new_table()
329 write_pnet(&mrt->net, net); in ipmr_new_table()
345 list_add_tail_rcu(&mrt->list, &net->ipv4.mr_tables); in ipmr_new_table()
361 struct net *net = dev_net(dev); in ipmr_del_tunnel() local
365 dev = __dev_get_by_name(net, "tunl0"); in ipmr_del_tunnel()
391 struct net_device *ipmr_new_tunnel(struct net *net, struct vifctl *v) in ipmr_new_tunnel() argument
395 dev = __dev_get_by_name(net, "tunl0"); in ipmr_new_tunnel()
425 (dev = __dev_get_by_name(net, p.name)) != NULL) { in ipmr_new_tunnel()
452 struct net *net = dev_net(dev); in reg_vif_xmit() local
461 err = ipmr_fib_lookup(net, &fl4, &mrt); in reg_vif_xmit()
496 static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt) in ipmr_reg_vif() argument
512 dev_net_set(dev, net); in ipmr_reg_vif()
623 struct net *net = read_pnet(&mrt->net); in ipmr_destroy_unres() local
639 rtnl_unicast(skb, net, NETLINK_CB(skb).portid); in ipmr_destroy_unres()
712 static int vif_add(struct net *net, struct mr_table *mrt, in vif_add() argument
734 dev = ipmr_reg_vif(net, mrt); in vif_add()
746 dev = ipmr_new_tunnel(net, vifc); in vif_add()
760 dev = dev_get_by_index(net, vifc->vifc_lcl_ifindex); in vif_add()
766 dev = ip_dev_find(net, vifc->vifc_lcl_addr.s_addr); in vif_add()
786 inet_netconf_notify_devconf(net, NETCONFA_MC_FORWARDING, dev->ifindex, in vif_add()
905 static void ipmr_cache_resolve(struct net *net, struct mr_table *mrt, in ipmr_cache_resolve() argument
929 rtnl_unicast(skb, net, NETLINK_CB(skb).portid); in ipmr_cache_resolve()
931 ip_mr_forward(net, mrt, skb, c, 0); in ipmr_cache_resolve()
1123 static int ipmr_mfc_add(struct net *net, struct mr_table *mrt, in ipmr_mfc_add() argument
1192 ipmr_cache_resolve(net, mrt, uc, c); in ipmr_mfc_add()
1246 struct net *net = sock_net(sk); in mrtsock_destruct() local
1250 ipmr_for_each_table(mrt, net) { in mrtsock_destruct()
1252 IPV4_DEVCONF_ALL(net, MC_FORWARDING)--; in mrtsock_destruct()
1253 inet_netconf_notify_devconf(net, NETCONFA_MC_FORWARDING, in mrtsock_destruct()
1255 net->ipv4.devconf_all); in mrtsock_destruct()
1275 struct net *net = sock_net(sk); in ip_mroute_setsockopt() local
1282 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ip_mroute_setsockopt()
1288 !ns_capable(net->user_ns, CAP_NET_ADMIN)) in ip_mroute_setsockopt()
1306 IPV4_DEVCONF_ALL(net, MC_FORWARDING)++; in ip_mroute_setsockopt()
1307 inet_netconf_notify_devconf(net, NETCONFA_MC_FORWARDING, in ip_mroute_setsockopt()
1309 net->ipv4.devconf_all); in ip_mroute_setsockopt()
1327 ret = vif_add(net, mrt, &vif, in ip_mroute_setsockopt()
1354 ret = ipmr_mfc_add(net, mrt, &mfc, in ip_mroute_setsockopt()
1412 if (!ipmr_new_table(net, v)) in ip_mroute_setsockopt()
1438 struct net *net = sock_net(sk); in ip_mroute_getsockopt() local
1445 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ip_mroute_getsockopt()
1488 struct net *net = sock_net(sk); in ipmr_ioctl() local
1491 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ipmr_ioctl()
1562 struct net *net = sock_net(sk); in ipmr_compat_ioctl() local
1565 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ipmr_compat_ioctl()
1618 struct net *net = dev_net(dev); in ipmr_device_event() local
1626 ipmr_for_each_table(mrt, net) { in ipmr_device_event()
1647 static void ip_encap(struct net *net, struct sk_buff *skb, in ip_encap() argument
1667 ip_select_ident(net, skb, NULL); in ip_encap()
1674 static inline int ipmr_forward_finish(struct net *net, struct sock *sk, in ipmr_forward_finish() argument
1679 IP_INC_STATS(net, IPSTATS_MIB_OUTFORWDATAGRAMS); in ipmr_forward_finish()
1680 IP_ADD_STATS(net, IPSTATS_MIB_OUTOCTETS, skb->len); in ipmr_forward_finish()
1685 return dst_output(net, sk, skb); in ipmr_forward_finish()
1692 static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt, in ipmr_queue_xmit() argument
1717 rt = ip_route_output_ports(net, &fl4, NULL, in ipmr_queue_xmit()
1726 rt = ip_route_output_ports(net, &fl4, NULL, iph->daddr, 0, in ipmr_queue_xmit()
1742 IP_INC_STATS(net, IPSTATS_MIB_FRAGFAILS); in ipmr_queue_xmit()
1765 ip_encap(net, skb, vif->local, vif->remote); in ipmr_queue_xmit()
1785 net, NULL, skb, skb->dev, dev, in ipmr_queue_xmit()
1806 static void ip_mr_forward(struct net *net, struct mr_table *mrt, in ip_mr_forward() argument
1899 ipmr_queue_xmit(net, mrt, skb2, cache, in ip_mr_forward()
1911 ipmr_queue_xmit(net, mrt, skb2, cache, psend); in ip_mr_forward()
1913 ipmr_queue_xmit(net, mrt, skb, cache, psend); in ip_mr_forward()
1923 static struct mr_table *ipmr_rt_fib_lookup(struct net *net, struct sk_buff *skb) in ipmr_rt_fib_lookup() argument
1941 err = ipmr_fib_lookup(net, &fl4, &mrt); in ipmr_rt_fib_lookup()
1955 struct net *net = dev_net(skb->dev); in ip_mr_input() local
1965 mrt = ipmr_rt_fib_lookup(net, skb); in ip_mr_input()
2030 ip_mr_forward(net, mrt, skb, cache, local); in ip_mr_input()
2095 struct net *net = dev_net(skb->dev); in pim_rcv_v1() local
2103 mrt = ipmr_rt_fib_lookup(net, skb); in pim_rcv_v1()
2122 struct net *net = dev_net(skb->dev); in pim_rcv() local
2135 mrt = ipmr_rt_fib_lookup(net, skb); in pim_rcv()
2191 int ipmr_get_route(struct net *net, struct sk_buff *skb, in ipmr_get_route() argument
2199 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_get_route()
2328 struct net *net = read_pnet(&mrt->net); in mroute_netlink_event() local
2341 rtnl_notify(skb, net, 0, RTNLGRP_IPV4_MROUTE, NULL, GFP_ATOMIC); in mroute_netlink_event()
2347 rtnl_set_sk_err(net, RTNLGRP_IPV4_MROUTE, err); in mroute_netlink_event()
2352 struct net *net = sock_net(skb->sk); in ipmr_rtm_dumproute() local
2364 ipmr_for_each_table(mrt, net) { in ipmr_rtm_dumproute()
2426 static struct vif_device *ipmr_vif_seq_idx(struct net *net, in ipmr_vif_seq_idx() argument
2445 struct net *net = seq_file_net(seq); in ipmr_vif_seq_start() local
2448 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_vif_seq_start()
2455 return *pos ? ipmr_vif_seq_idx(net, seq->private, *pos - 1) in ipmr_vif_seq_start()
2462 struct net *net = seq_file_net(seq); in ipmr_vif_seq_next() local
2467 return ipmr_vif_seq_idx(net, iter, 0); in ipmr_vif_seq_next()
2534 static struct mfc_cache *ipmr_mfc_seq_idx(struct net *net, in ipmr_mfc_seq_idx() argument
2564 struct net *net = seq_file_net(seq); in ipmr_mfc_seq_start() local
2567 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_mfc_seq_start()
2574 return *pos ? ipmr_mfc_seq_idx(net, seq->private, *pos - 1) in ipmr_mfc_seq_start()
2582 struct net *net = seq_file_net(seq); in ipmr_mfc_seq_next() local
2588 return ipmr_mfc_seq_idx(net, seq->private, 0); in ipmr_mfc_seq_next()
2706 static int __net_init ipmr_net_init(struct net *net) in ipmr_net_init() argument
2710 err = ipmr_rules_init(net); in ipmr_net_init()
2716 if (!proc_create("ip_mr_vif", 0, net->proc_net, &ipmr_vif_fops)) in ipmr_net_init()
2718 if (!proc_create("ip_mr_cache", 0, net->proc_net, &ipmr_mfc_fops)) in ipmr_net_init()
2725 remove_proc_entry("ip_mr_vif", net->proc_net); in ipmr_net_init()
2727 ipmr_rules_exit(net); in ipmr_net_init()
2733 static void __net_exit ipmr_net_exit(struct net *net) in ipmr_net_exit() argument
2736 remove_proc_entry("ip_mr_cache", net->proc_net); in ipmr_net_exit()
2737 remove_proc_entry("ip_mr_vif", net->proc_net); in ipmr_net_exit()
2739 ipmr_rules_exit(net); in ipmr_net_exit()