Lines Matching refs:net
47 struct net init_net = {
75 u64 __net_gen_cookie(struct net *net) in __net_gen_cookie() argument
78 u64 res = atomic64_read(&net->net_cookie); in __net_gen_cookie()
83 atomic64_cmpxchg(&net->net_cookie, 0, res); in __net_gen_cookie()
99 static int net_assign_generic(struct net *net, unsigned int id, void *data) in net_assign_generic() argument
105 old_ng = rcu_dereference_protected(net->gen, in net_assign_generic()
131 rcu_assign_pointer(net->gen, ng); in net_assign_generic()
136 static int ops_init(const struct pernet_operations *ops, struct net *net) in ops_init() argument
146 err = net_assign_generic(net, *ops->id, data); in ops_init()
152 err = ops->init(net); in ops_init()
163 static void ops_free(const struct pernet_operations *ops, struct net *net) in ops_free() argument
166 kfree(net_generic(net, *ops->id)); in ops_free()
173 struct net *net; in ops_pre_exit_list() local
176 list_for_each_entry(net, net_exit_list, exit_list) in ops_pre_exit_list()
177 ops->pre_exit(net); in ops_pre_exit_list()
184 struct net *net; in ops_exit_list() local
186 list_for_each_entry(net, net_exit_list, exit_list) in ops_exit_list()
187 ops->exit(net); in ops_exit_list()
196 struct net *net; in ops_free_list() local
198 list_for_each_entry(net, net_exit_list, exit_list) in ops_free_list()
199 ops_free(ops, net); in ops_free_list()
204 static int alloc_netid(struct net *net, struct net *peer, int reqid) in alloc_netid() argument
213 return idr_alloc(&net->netns_ids, peer, min, max, GFP_ATOMIC); in alloc_netid()
222 static int net_eq_idr(int id, void *net, void *peer) in net_eq_idr() argument
224 if (net_eq(net, peer)) in net_eq_idr()
230 static int __peernet2id(const struct net *net, struct net *peer) in __peernet2id() argument
232 int id = idr_for_each(&net->netns_ids, net_eq_idr, peer); in __peernet2id()
243 static void rtnl_net_notifyid(struct net *net, int cmd, int id, u32 portid,
248 int peernet2id_alloc(struct net *net, struct net *peer, gfp_t gfp) in peernet2id_alloc() argument
252 if (refcount_read(&net->count) == 0) in peernet2id_alloc()
255 spin_lock_bh(&net->nsid_lock); in peernet2id_alloc()
256 id = __peernet2id(net, peer); in peernet2id_alloc()
258 spin_unlock_bh(&net->nsid_lock); in peernet2id_alloc()
268 spin_unlock_bh(&net->nsid_lock); in peernet2id_alloc()
272 id = alloc_netid(net, peer, -1); in peernet2id_alloc()
273 spin_unlock_bh(&net->nsid_lock); in peernet2id_alloc()
279 rtnl_net_notifyid(net, RTM_NEWNSID, id, 0, NULL, gfp); in peernet2id_alloc()
286 int peernet2id(const struct net *net, struct net *peer) in peernet2id() argument
291 id = __peernet2id(net, peer); in peernet2id()
301 bool peernet_has_id(const struct net *net, struct net *peer) in peernet_has_id() argument
303 return peernet2id(net, peer) >= 0; in peernet_has_id()
306 struct net *get_net_ns_by_id(const struct net *net, int id) in get_net_ns_by_id() argument
308 struct net *peer; in get_net_ns_by_id()
314 peer = idr_find(&net->netns_ids, id); in get_net_ns_by_id()
325 static __net_init int setup_net(struct net *net, struct user_namespace *user_ns) in setup_net() argument
332 refcount_set(&net->count, 1); in setup_net()
333 refcount_set(&net->passive, 1); in setup_net()
334 get_random_bytes(&net->hash_mix, sizeof(u32)); in setup_net()
335 net->dev_base_seq = 1; in setup_net()
336 net->user_ns = user_ns; in setup_net()
337 idr_init(&net->netns_ids); in setup_net()
338 spin_lock_init(&net->nsid_lock); in setup_net()
339 mutex_init(&net->ipv4.ra_mutex); in setup_net()
342 error = ops_init(ops, net); in setup_net()
347 list_add_tail_rcu(&net->list, &net_namespace_list); in setup_net()
356 list_add(&net->exit_list, &net_exit_list); in setup_net()
375 static int __net_init net_defaults_init_net(struct net *net) in net_defaults_init_net() argument
377 net->core.sysctl_somaxconn = SOMAXCONN; in net_defaults_init_net()
409 static struct net *net_alloc(void) in net_alloc()
411 struct net *net = NULL; in net_alloc() local
418 net = kmem_cache_zalloc(net_cachep, GFP_KERNEL); in net_alloc()
419 if (!net) in net_alloc()
423 net->key_domain = kzalloc(sizeof(struct key_tag), GFP_KERNEL); in net_alloc()
424 if (!net->key_domain) in net_alloc()
426 refcount_set(&net->key_domain->usage, 1); in net_alloc()
429 rcu_assign_pointer(net->gen, ng); in net_alloc()
431 return net; in net_alloc()
435 kmem_cache_free(net_cachep, net); in net_alloc()
436 net = NULL; in net_alloc()
443 static void net_free(struct net *net) in net_free() argument
445 kfree(rcu_access_pointer(net->gen)); in net_free()
446 kmem_cache_free(net_cachep, net); in net_free()
451 struct net *ns = p; in net_drop_ns()
456 struct net *copy_net_ns(unsigned long flags, in copy_net_ns()
457 struct user_namespace *user_ns, struct net *old_net) in copy_net_ns()
460 struct net *net; in copy_net_ns() local
470 net = net_alloc(); in copy_net_ns()
471 if (!net) { in copy_net_ns()
475 refcount_set(&net->passive, 1); in copy_net_ns()
476 net->ucounts = ucounts; in copy_net_ns()
483 rv = setup_net(net, user_ns); in copy_net_ns()
489 key_remove_domain(net->key_domain); in copy_net_ns()
491 net_drop_ns(net); in copy_net_ns()
496 return net; in copy_net_ns()
508 void net_ns_get_ownership(const struct net *net, kuid_t *uid, kgid_t *gid) in net_ns_get_ownership() argument
510 if (net) { in net_ns_get_ownership()
511 kuid_t ns_root_uid = make_kuid(net->user_ns, 0); in net_ns_get_ownership()
512 kgid_t ns_root_gid = make_kgid(net->user_ns, 0); in net_ns_get_ownership()
526 static void unhash_nsid(struct net *net, struct net *last) in unhash_nsid() argument
528 struct net *tmp; in unhash_nsid()
539 id = __peernet2id(tmp, net); in unhash_nsid()
549 spin_lock_bh(&net->nsid_lock); in unhash_nsid()
550 idr_destroy(&net->netns_ids); in unhash_nsid()
551 spin_unlock_bh(&net->nsid_lock); in unhash_nsid()
559 struct net *net, *tmp, *last; in cleanup_net() local
570 llist_for_each_entry(net, net_kill_list, cleanup_list) in cleanup_net()
571 list_del_rcu(&net->list); in cleanup_net()
582 last = list_last_entry(&net_namespace_list, struct net, list); in cleanup_net()
585 llist_for_each_entry(net, net_kill_list, cleanup_list) { in cleanup_net()
586 unhash_nsid(net, last); in cleanup_net()
587 list_add_tail(&net->exit_list, &net_exit_list); in cleanup_net()
618 list_for_each_entry_safe(net, tmp, &net_exit_list, exit_list) { in cleanup_net()
619 list_del_init(&net->exit_list); in cleanup_net()
620 dec_net_namespaces(net->ucounts); in cleanup_net()
621 key_remove_domain(net->key_domain); in cleanup_net()
622 put_user_ns(net->user_ns); in cleanup_net()
623 net_drop_ns(net); in cleanup_net()
645 void __put_net(struct net *net) in __put_net() argument
648 if (llist_add(&net->cleanup_list, &cleanup_list)) in __put_net()
653 struct net *get_net_ns_by_fd(int fd) in get_net_ns_by_fd()
657 struct net *net; in get_net_ns_by_fd() local
665 net = get_net(container_of(ns, struct net, ns)); in get_net_ns_by_fd()
667 net = ERR_PTR(-EINVAL); in get_net_ns_by_fd()
670 return net; in get_net_ns_by_fd()
674 struct net *get_net_ns_by_fd(int fd) in get_net_ns_by_fd()
681 struct net *get_net_ns_by_pid(pid_t pid) in get_net_ns_by_pid()
684 struct net *net; in get_net_ns_by_pid() local
687 net = ERR_PTR(-ESRCH); in get_net_ns_by_pid()
695 net = get_net(nsproxy->net_ns); in get_net_ns_by_pid()
699 return net; in get_net_ns_by_pid()
703 static __net_init int net_ns_net_init(struct net *net) in net_ns_net_init() argument
706 net->ns.ops = &netns_operations; in net_ns_net_init()
708 return ns_alloc_inum(&net->ns); in net_ns_net_init()
711 static __net_exit void net_ns_net_exit(struct net *net) in net_ns_net_exit() argument
713 ns_free_inum(&net->ns); in net_ns_net_exit()
732 struct net *net = sock_net(skb->sk); in rtnl_net_newid() local
735 struct net *peer; in rtnl_net_newid()
764 spin_lock_bh(&net->nsid_lock); in rtnl_net_newid()
765 if (__peernet2id(net, peer) >= 0) { in rtnl_net_newid()
766 spin_unlock_bh(&net->nsid_lock); in rtnl_net_newid()
774 err = alloc_netid(net, peer, nsid); in rtnl_net_newid()
775 spin_unlock_bh(&net->nsid_lock); in rtnl_net_newid()
777 rtnl_net_notifyid(net, RTM_NEWNSID, err, NETLINK_CB(skb).portid, in rtnl_net_newid()
876 struct net *net = sock_net(skb->sk); in rtnl_net_getid() local
883 struct net *peer, *target = net; in rtnl_net_getid()
898 peer = get_net_ns_by_id(net, nla_get_s32(tb[NETNSA_NSID])); in rtnl_net_getid()
925 fillargs.ref_nsid = peernet2id(net, peer); in rtnl_net_getid()
939 err = rtnl_unicast(msg, net, NETLINK_CB(skb).portid); in rtnl_net_getid()
952 struct net *tgt_net;
953 struct net *ref_net;
1000 struct net *net; in rtnl_valid_dump_net_req() local
1002 net = rtnl_get_net_ns_capable(sk, nla_get_s32(tb[i])); in rtnl_valid_dump_net_req()
1003 if (IS_ERR(net)) { in rtnl_valid_dump_net_req()
1007 return PTR_ERR(net); in rtnl_valid_dump_net_req()
1011 net_cb->tgt_net = net; in rtnl_valid_dump_net_req()
1056 static void rtnl_net_notifyid(struct net *net, int cmd, int id, u32 portid, in rtnl_net_notifyid() argument
1076 rtnl_notify(msg, net, portid, RTNLGRP_NSID, nlh, gfp); in rtnl_net_notifyid()
1082 rtnl_set_sk_err(net, RTNLGRP_NSID, err); in rtnl_net_notifyid()
1090 net_cachep = kmem_cache_create("net_namespace", sizeof(struct net), in net_ns_init()
1134 struct net *net; in __register_pernet_operations() local
1143 for_each_net(net) { in __register_pernet_operations()
1144 error = ops_init(ops, net); in __register_pernet_operations()
1147 list_add_tail(&net->exit_list, &net_exit_list); in __register_pernet_operations()
1164 struct net *net; in __unregister_pernet_operations() local
1169 for_each_net(net) in __unregister_pernet_operations()
1170 list_add_tail(&net->exit_list, &net_exit_list); in __unregister_pernet_operations()
1338 struct net *net = NULL; in netns_get() local
1344 net = get_net(nsproxy->net_ns); in netns_get()
1347 return net ? &net->ns : NULL; in netns_get()
1350 static inline struct net *to_net_ns(struct ns_common *ns) in to_net_ns()
1352 return container_of(ns, struct net, ns); in to_net_ns()
1363 struct net *net = to_net_ns(ns); in netns_install() local
1365 if (!ns_capable(net->user_ns, CAP_SYS_ADMIN) || in netns_install()
1370 nsproxy->net_ns = get_net(net); in netns_install()