Lines Matching refs:net
35 struct net init_net = {
56 static int net_assign_generic(struct net *net, int id, void *data) in net_assign_generic() argument
63 old_ng = rcu_dereference_protected(net->gen, in net_assign_generic()
86 rcu_assign_pointer(net->gen, ng); in net_assign_generic()
93 static int ops_init(const struct pernet_operations *ops, struct net *net) in ops_init() argument
103 err = net_assign_generic(net, *ops->id, data); in ops_init()
109 err = ops->init(net); in ops_init()
120 static void ops_free(const struct pernet_operations *ops, struct net *net) in ops_free() argument
124 kfree(net_generic(net, id)); in ops_free()
131 struct net *net; in ops_exit_list() local
133 list_for_each_entry(net, net_exit_list, exit_list) in ops_exit_list()
134 ops->exit(net); in ops_exit_list()
143 struct net *net; in ops_free_list() local
145 list_for_each_entry(net, net_exit_list, exit_list) in ops_free_list()
146 ops_free(ops, net); in ops_free_list()
151 static int alloc_netid(struct net *net, struct net *peer, int reqid) in alloc_netid() argument
160 return idr_alloc(&net->netns_ids, peer, min, max, GFP_ATOMIC); in alloc_netid()
169 static int net_eq_idr(int id, void *net, void *peer) in net_eq_idr() argument
171 if (net_eq(net, peer)) in net_eq_idr()
180 static int __peernet2id_alloc(struct net *net, struct net *peer, bool *alloc) in __peernet2id_alloc() argument
182 int id = idr_for_each(&net->netns_ids, net_eq_idr, peer); in __peernet2id_alloc()
194 id = alloc_netid(net, peer, -1); in __peernet2id_alloc()
203 static int __peernet2id(struct net *net, struct net *peer) in __peernet2id() argument
207 return __peernet2id_alloc(net, peer, &no); in __peernet2id()
210 static void rtnl_net_notifyid(struct net *net, int cmd, int id);
214 int peernet2id_alloc(struct net *net, struct net *peer) in peernet2id_alloc() argument
220 spin_lock_irqsave(&net->nsid_lock, flags); in peernet2id_alloc()
222 id = __peernet2id_alloc(net, peer, &alloc); in peernet2id_alloc()
223 spin_unlock_irqrestore(&net->nsid_lock, flags); in peernet2id_alloc()
225 rtnl_net_notifyid(net, RTM_NEWNSID, id); in peernet2id_alloc()
231 int peernet2id(struct net *net, struct net *peer) in peernet2id() argument
236 spin_lock_irqsave(&net->nsid_lock, flags); in peernet2id()
237 id = __peernet2id(net, peer); in peernet2id()
238 spin_unlock_irqrestore(&net->nsid_lock, flags); in peernet2id()
245 bool peernet_has_id(struct net *net, struct net *peer) in peernet_has_id() argument
247 return peernet2id(net, peer) >= 0; in peernet_has_id()
250 struct net *get_net_ns_by_id(struct net *net, int id) in get_net_ns_by_id() argument
253 struct net *peer; in get_net_ns_by_id()
259 spin_lock_irqsave(&net->nsid_lock, flags); in get_net_ns_by_id()
260 peer = idr_find(&net->netns_ids, id); in get_net_ns_by_id()
263 spin_unlock_irqrestore(&net->nsid_lock, flags); in get_net_ns_by_id()
272 static __net_init int setup_net(struct net *net, struct user_namespace *user_ns) in setup_net() argument
279 atomic_set(&net->count, 1); in setup_net()
280 atomic_set(&net->passive, 1); in setup_net()
281 net->dev_base_seq = 1; in setup_net()
282 net->user_ns = user_ns; in setup_net()
283 idr_init(&net->netns_ids); in setup_net()
284 spin_lock_init(&net->nsid_lock); in setup_net()
287 error = ops_init(ops, net); in setup_net()
298 list_add(&net->exit_list, &net_exit_list); in setup_net()
316 static struct net *net_alloc(void) in net_alloc()
318 struct net *net = NULL; in net_alloc() local
325 net = kmem_cache_zalloc(net_cachep, GFP_KERNEL); in net_alloc()
326 if (!net) in net_alloc()
329 rcu_assign_pointer(net->gen, ng); in net_alloc()
331 return net; in net_alloc()
338 static void net_free(struct net *net) in net_free() argument
340 kfree(rcu_access_pointer(net->gen)); in net_free()
341 kmem_cache_free(net_cachep, net); in net_free()
346 struct net *ns = p; in net_drop_ns()
351 struct net *copy_net_ns(unsigned long flags, in copy_net_ns()
352 struct user_namespace *user_ns, struct net *old_net) in copy_net_ns()
354 struct net *net; in copy_net_ns() local
360 net = net_alloc(); in copy_net_ns()
361 if (!net) in copy_net_ns()
367 rv = setup_net(net, user_ns); in copy_net_ns()
370 list_add_tail_rcu(&net->list, &net_namespace_list); in copy_net_ns()
376 net_drop_ns(net); in copy_net_ns()
379 return net; in copy_net_ns()
388 struct net *net, *tmp; in cleanup_net() local
401 list_for_each_entry(net, &net_kill_list, cleanup_list) { in cleanup_net()
402 list_del_rcu(&net->list); in cleanup_net()
403 list_add_tail(&net->exit_list, &net_exit_list); in cleanup_net()
408 id = __peernet2id(tmp, net); in cleanup_net()
415 spin_lock_irq(&net->nsid_lock); in cleanup_net()
416 idr_destroy(&net->netns_ids); in cleanup_net()
417 spin_unlock_irq(&net->nsid_lock); in cleanup_net()
445 list_for_each_entry_safe(net, tmp, &net_exit_list, exit_list) { in cleanup_net()
446 list_del_init(&net->exit_list); in cleanup_net()
447 put_user_ns(net->user_ns); in cleanup_net()
448 net_drop_ns(net); in cleanup_net()
453 void __put_net(struct net *net) in __put_net() argument
459 list_add(&net->cleanup_list, &cleanup_list); in __put_net()
466 struct net *get_net_ns_by_fd(int fd) in get_net_ns_by_fd()
470 struct net *net; in get_net_ns_by_fd() local
478 net = get_net(container_of(ns, struct net, ns)); in get_net_ns_by_fd()
480 net = ERR_PTR(-EINVAL); in get_net_ns_by_fd()
483 return net; in get_net_ns_by_fd()
487 struct net *get_net_ns_by_fd(int fd) in get_net_ns_by_fd()
494 struct net *get_net_ns_by_pid(pid_t pid) in get_net_ns_by_pid()
497 struct net *net; in get_net_ns_by_pid() local
500 net = ERR_PTR(-ESRCH); in get_net_ns_by_pid()
508 net = get_net(nsproxy->net_ns); in get_net_ns_by_pid()
512 return net; in get_net_ns_by_pid()
516 static __net_init int net_ns_net_init(struct net *net) in net_ns_net_init() argument
519 net->ns.ops = &netns_operations; in net_ns_net_init()
521 return ns_alloc_inum(&net->ns); in net_ns_net_init()
524 static __net_exit void net_ns_net_exit(struct net *net) in net_ns_net_exit() argument
526 ns_free_inum(&net->ns); in net_ns_net_exit()
543 struct net *net = sock_net(skb->sk); in rtnl_net_newid() local
546 struct net *peer; in rtnl_net_newid()
566 spin_lock_irqsave(&net->nsid_lock, flags); in rtnl_net_newid()
567 if (__peernet2id(net, peer) >= 0) { in rtnl_net_newid()
568 spin_unlock_irqrestore(&net->nsid_lock, flags); in rtnl_net_newid()
573 err = alloc_netid(net, peer, nsid); in rtnl_net_newid()
574 spin_unlock_irqrestore(&net->nsid_lock, flags); in rtnl_net_newid()
576 rtnl_net_notifyid(net, RTM_NEWNSID, err); in rtnl_net_newid()
592 int cmd, struct net *net, int nsid) in rtnl_net_fill() argument
617 struct net *net = sock_net(skb->sk); in rtnl_net_getid() local
620 struct net *peer; in rtnl_net_getid()
643 id = peernet2id(net, peer); in rtnl_net_getid()
645 RTM_NEWNSID, net, id); in rtnl_net_getid()
649 err = rtnl_unicast(msg, net, NETLINK_CB(skb).portid); in rtnl_net_getid()
660 struct net *net; member
677 RTM_NEWNSID, net_cb->net, id); in rtnl_net_dumpid_one()
688 struct net *net = sock_net(skb->sk); in rtnl_net_dumpid() local
690 .net = net, in rtnl_net_dumpid()
698 spin_lock_irqsave(&net->nsid_lock, flags); in rtnl_net_dumpid()
699 idr_for_each(&net->netns_ids, rtnl_net_dumpid_one, &net_cb); in rtnl_net_dumpid()
700 spin_unlock_irqrestore(&net->nsid_lock, flags); in rtnl_net_dumpid()
706 static void rtnl_net_notifyid(struct net *net, int cmd, int id) in rtnl_net_notifyid() argument
715 err = rtnl_net_fill(msg, 0, 0, 0, cmd, net, id); in rtnl_net_notifyid()
719 rtnl_notify(msg, net, 0, RTNLGRP_NSID, NULL, 0); in rtnl_net_notifyid()
725 rtnl_set_sk_err(net, RTNLGRP_NSID, err); in rtnl_net_notifyid()
733 net_cachep = kmem_cache_create("net_namespace", sizeof(struct net), in net_ns_init()
774 struct net *net; in __register_pernet_operations() local
780 for_each_net(net) { in __register_pernet_operations()
781 error = ops_init(ops, net); in __register_pernet_operations()
784 list_add_tail(&net->exit_list, &net_exit_list); in __register_pernet_operations()
799 struct net *net; in __unregister_pernet_operations() local
803 for_each_net(net) in __unregister_pernet_operations()
804 list_add_tail(&net->exit_list, &net_exit_list); in __unregister_pernet_operations()
964 struct net *net = NULL; in netns_get() local
970 net = get_net(nsproxy->net_ns); in netns_get()
973 return net ? &net->ns : NULL; in netns_get()
976 static inline struct net *to_net_ns(struct ns_common *ns) in to_net_ns()
978 return container_of(ns, struct net, ns); in to_net_ns()
988 struct net *net = to_net_ns(ns); in netns_install() local
990 if (!ns_capable(net->user_ns, CAP_SYS_ADMIN) || in netns_install()
995 nsproxy->net_ns = get_net(net); in netns_install()