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()
150 static void rtnl_net_notifyid(struct net *net, struct net *peer, int cmd,
152 static int alloc_netid(struct net *net, struct net *peer, int reqid) in alloc_netid() argument
163 id = idr_alloc(&net->netns_ids, peer, min, max, GFP_KERNEL); in alloc_netid()
165 rtnl_net_notifyid(net, peer, RTM_NEWNSID, id); in alloc_netid()
176 static int net_eq_idr(int id, void *net, void *peer) in net_eq_idr() argument
178 if (net_eq(net, peer)) in net_eq_idr()
183 static int __peernet2id(struct net *net, struct net *peer, bool alloc) in __peernet2id() argument
185 int id = idr_for_each(&net->netns_ids, net_eq_idr, peer); in __peernet2id()
196 return alloc_netid(net, peer, -1); in __peernet2id()
204 int peernet2id(struct net *net, struct net *peer) in peernet2id() argument
209 id = __peernet2id(net, peer, alloc); in peernet2id()
214 struct net *get_net_ns_by_id(struct net *net, int id) in get_net_ns_by_id() argument
216 struct net *peer; in get_net_ns_by_id()
222 peer = idr_find(&net->netns_ids, id); in get_net_ns_by_id()
233 static __net_init int setup_net(struct net *net, struct user_namespace *user_ns) in setup_net() argument
240 atomic_set(&net->count, 1); in setup_net()
241 atomic_set(&net->passive, 1); in setup_net()
242 net->dev_base_seq = 1; in setup_net()
243 net->user_ns = user_ns; in setup_net()
244 idr_init(&net->netns_ids); in setup_net()
247 error = ops_init(ops, net); in setup_net()
258 list_add(&net->exit_list, &net_exit_list); in setup_net()
276 static struct net *net_alloc(void) in net_alloc()
278 struct net *net = NULL; in net_alloc() local
285 net = kmem_cache_zalloc(net_cachep, GFP_KERNEL); in net_alloc()
286 if (!net) in net_alloc()
289 rcu_assign_pointer(net->gen, ng); in net_alloc()
291 return net; in net_alloc()
298 static void net_free(struct net *net) in net_free() argument
300 kfree(rcu_access_pointer(net->gen)); in net_free()
301 kmem_cache_free(net_cachep, net); in net_free()
306 struct net *ns = p; in net_drop_ns()
311 struct net *copy_net_ns(unsigned long flags, in copy_net_ns()
312 struct user_namespace *user_ns, struct net *old_net) in copy_net_ns()
314 struct net *net; in copy_net_ns() local
320 net = net_alloc(); in copy_net_ns()
321 if (!net) in copy_net_ns()
327 rv = setup_net(net, user_ns); in copy_net_ns()
330 list_add_tail_rcu(&net->list, &net_namespace_list); in copy_net_ns()
336 net_drop_ns(net); in copy_net_ns()
339 return net; in copy_net_ns()
348 struct net *net, *tmp; in cleanup_net() local
361 list_for_each_entry(net, &net_kill_list, cleanup_list) { in cleanup_net()
362 list_del_rcu(&net->list); in cleanup_net()
363 list_add_tail(&net->exit_list, &net_exit_list); in cleanup_net()
365 int id = __peernet2id(tmp, net, false); in cleanup_net()
368 rtnl_net_notifyid(tmp, net, RTM_DELNSID, id); in cleanup_net()
372 idr_destroy(&net->netns_ids); in cleanup_net()
400 list_for_each_entry_safe(net, tmp, &net_exit_list, exit_list) { in cleanup_net()
401 list_del_init(&net->exit_list); in cleanup_net()
402 put_user_ns(net->user_ns); in cleanup_net()
403 net_drop_ns(net); in cleanup_net()
408 void __put_net(struct net *net) in __put_net() argument
414 list_add(&net->cleanup_list, &cleanup_list); in __put_net()
421 struct net *get_net_ns_by_fd(int fd) in get_net_ns_by_fd()
425 struct net *net; in get_net_ns_by_fd() local
433 net = get_net(container_of(ns, struct net, ns)); in get_net_ns_by_fd()
435 net = ERR_PTR(-EINVAL); in get_net_ns_by_fd()
438 return net; in get_net_ns_by_fd()
442 struct net *get_net_ns_by_fd(int fd) in get_net_ns_by_fd()
449 struct net *get_net_ns_by_pid(pid_t pid) in get_net_ns_by_pid()
452 struct net *net; in get_net_ns_by_pid() local
455 net = ERR_PTR(-ESRCH); in get_net_ns_by_pid()
463 net = get_net(nsproxy->net_ns); in get_net_ns_by_pid()
467 return net; in get_net_ns_by_pid()
471 static __net_init int net_ns_net_init(struct net *net) in net_ns_net_init() argument
474 net->ns.ops = &netns_operations; in net_ns_net_init()
476 return ns_alloc_inum(&net->ns); in net_ns_net_init()
479 static __net_exit void net_ns_net_exit(struct net *net) in net_ns_net_exit() argument
481 ns_free_inum(&net->ns); in net_ns_net_exit()
498 struct net *net = sock_net(skb->sk); in rtnl_net_newid() local
500 struct net *peer; in rtnl_net_newid()
520 if (__peernet2id(net, peer, false) >= 0) { in rtnl_net_newid()
525 err = alloc_netid(net, peer, nsid); in rtnl_net_newid()
541 int cmd, struct net *net, struct net *peer, in rtnl_net_fill() argument
560 id = __peernet2id(net, peer, false); in rtnl_net_fill()
577 struct net *net = sock_net(skb->sk); in rtnl_net_getid() local
580 struct net *peer; in rtnl_net_getid()
604 RTM_NEWNSID, net, peer, -1); in rtnl_net_getid()
608 err = rtnl_unicast(msg, net, NETLINK_CB(skb).portid); in rtnl_net_getid()
619 struct net *net; member
636 RTM_NEWNSID, net_cb->net, peer, id); in rtnl_net_dumpid_one()
647 struct net *net = sock_net(skb->sk); in rtnl_net_dumpid() local
649 .net = net, in rtnl_net_dumpid()
658 idr_for_each(&net->netns_ids, rtnl_net_dumpid_one, &net_cb); in rtnl_net_dumpid()
664 static void rtnl_net_notifyid(struct net *net, struct net *peer, int cmd, in rtnl_net_notifyid() argument
674 err = rtnl_net_fill(msg, 0, 0, 0, cmd, net, peer, id); in rtnl_net_notifyid()
678 rtnl_notify(msg, net, 0, RTNLGRP_NSID, NULL, 0); in rtnl_net_notifyid()
684 rtnl_set_sk_err(net, RTNLGRP_NSID, err); in rtnl_net_notifyid()
692 net_cachep = kmem_cache_create("net_namespace", sizeof(struct net), in net_ns_init()
733 struct net *net; in __register_pernet_operations() local
739 for_each_net(net) { in __register_pernet_operations()
740 error = ops_init(ops, net); in __register_pernet_operations()
743 list_add_tail(&net->exit_list, &net_exit_list); in __register_pernet_operations()
758 struct net *net; in __unregister_pernet_operations() local
762 for_each_net(net) in __unregister_pernet_operations()
763 list_add_tail(&net->exit_list, &net_exit_list); in __unregister_pernet_operations()
923 struct net *net = NULL; in netns_get() local
929 net = get_net(nsproxy->net_ns); in netns_get()
932 return net ? &net->ns : NULL; in netns_get()
935 static inline struct net *to_net_ns(struct ns_common *ns) in to_net_ns()
937 return container_of(ns, struct net, ns); in to_net_ns()
947 struct net *net = to_net_ns(ns); in netns_install() local
949 if (!ns_capable(net->user_ns, CAP_SYS_ADMIN) || in netns_install()
954 nsproxy->net_ns = get_net(net); in netns_install()