#ifndef __NET_NET_NAMESPACE_H
#define __NET_NET_NAMESPACE_H
#include <linux/atomic.h>
#include <linux/refcount.h>
#include <linux/workqueue.h>
#include <linux/list.h>
#include <linux/sysctl.h>
#include <linux/uidgid.h>
#include <net/flow.h>
#include <net/netns/core.h>
#include <net/netns/mib.h>
#include <net/netns/unix.h>
#include <net/netns/packet.h>
#include <net/netns/ipv4.h>
#include <net/netns/ipv6.h>
#include <net/netns/nexthop.h>
#include <net/netns/ieee802154_6lowpan.h>
#include <net/netns/sctp.h>
#include <net/netns/netfilter.h>
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
#include <net/netns/conntrack.h>
#endif
#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
#include <net/netns/flow_table.h>
#endif
#include <net/netns/nftables.h>
#include <net/netns/xfrm.h>
#include <net/netns/mpls.h>
#include <net/netns/can.h>
#include <net/netns/xdp.h>
#include <net/netns/smc.h>
#include <net/netns/bpf.h>
#include <net/netns/mctp.h>
#include <net/net_trackers.h>
#include <linux/ns_common.h>
#include <linux/idr.h>
#include <linux/skbuff.h>
#include <linux/notifier.h>
#include <linux/xarray.h>
struct user_namespace;
struct proc_dir_entry;
struct net_device;
struct sock;
struct ctl_table_header;
struct net_generic;
struct uevent_sock;
struct netns_ipvs;
struct bpf_prog;
#define NETDEV_HASHBITS …
#define NETDEV_HASHENTRIES …
struct net { … } __randomize_layout;
#include <linux/seq_file_net.h>
extern struct net init_net;
#ifdef CONFIG_NET_NS
struct net *copy_net_ns(unsigned long flags, struct user_namespace *user_ns,
struct net *old_net);
void net_ns_get_ownership(const struct net *net, kuid_t *uid, kgid_t *gid);
void net_ns_barrier(void);
struct ns_common *get_net_ns(struct ns_common *ns);
struct net *get_net_ns_by_fd(int fd);
#else
#include <linux/sched.h>
#include <linux/nsproxy.h>
static inline struct net *copy_net_ns(unsigned long flags,
struct user_namespace *user_ns, struct net *old_net)
{
if (flags & CLONE_NEWNET)
return ERR_PTR(-EINVAL);
return old_net;
}
static inline void net_ns_get_ownership(const struct net *net,
kuid_t *uid, kgid_t *gid)
{
*uid = GLOBAL_ROOT_UID;
*gid = GLOBAL_ROOT_GID;
}
static inline void net_ns_barrier(void) {}
static inline struct ns_common *get_net_ns(struct ns_common *ns)
{
return ERR_PTR(-EINVAL);
}
static inline struct net *get_net_ns_by_fd(int fd)
{
return ERR_PTR(-EINVAL);
}
#endif
extern struct list_head net_namespace_list;
struct net *get_net_ns_by_pid(pid_t pid);
#ifdef CONFIG_SYSCTL
void ipx_register_sysctl(void);
void ipx_unregister_sysctl(void);
#else
#define ipx_register_sysctl …
#define ipx_unregister_sysctl …
#endif
#ifdef CONFIG_NET_NS
void __put_net(struct net *net);
static inline struct net *get_net(struct net *net)
{ … }
static inline struct net *maybe_get_net(struct net *net)
{ … }
static inline void put_net(struct net *net)
{ … }
static inline
int net_eq(const struct net *net1, const struct net *net2)
{ … }
static inline int check_net(const struct net *net)
{ … }
void net_drop_ns(void *);
#else
static inline struct net *get_net(struct net *net)
{
return net;
}
static inline void put_net(struct net *net)
{
}
static inline struct net *maybe_get_net(struct net *net)
{
return net;
}
static inline
int net_eq(const struct net *net1, const struct net *net2)
{
return 1;
}
static inline int check_net(const struct net *net)
{
return 1;
}
#define net_drop_ns …
#endif
static inline void __netns_tracker_alloc(struct net *net,
netns_tracker *tracker,
bool refcounted,
gfp_t gfp)
{ … }
static inline void netns_tracker_alloc(struct net *net, netns_tracker *tracker,
gfp_t gfp)
{ … }
static inline void __netns_tracker_free(struct net *net,
netns_tracker *tracker,
bool refcounted)
{ … }
static inline struct net *get_net_track(struct net *net,
netns_tracker *tracker, gfp_t gfp)
{ … }
static inline void put_net_track(struct net *net, netns_tracker *tracker)
{ … }
possible_net_t;
static inline void write_pnet(possible_net_t *pnet, struct net *net)
{ … }
static inline struct net *read_pnet(const possible_net_t *pnet)
{ … }
static inline struct net *read_pnet_rcu(possible_net_t *pnet)
{ … }
#define for_each_net(VAR) …
#define for_each_net_continue_reverse(VAR) …
#define for_each_net_rcu(VAR) …
#ifdef CONFIG_NET_NS
#define __net_init
#define __net_exit
#define __net_initdata
#define __net_initconst
#else
#define __net_init …
#define __net_exit …
#define __net_initdata …
#define __net_initconst …
#endif
int peernet2id_alloc(struct net *net, struct net *peer, gfp_t gfp);
int peernet2id(const struct net *net, struct net *peer);
bool peernet_has_id(const struct net *net, struct net *peer);
struct net *get_net_ns_by_id(const struct net *net, int id);
struct pernet_operations { … };
int register_pernet_subsys(struct pernet_operations *);
void unregister_pernet_subsys(struct pernet_operations *);
int register_pernet_device(struct pernet_operations *);
void unregister_pernet_device(struct pernet_operations *);
struct ctl_table;
#define register_net_sysctl(net, path, table) …
#ifdef CONFIG_SYSCTL
int net_sysctl_init(void);
struct ctl_table_header *register_net_sysctl_sz(struct net *net, const char *path,
struct ctl_table *table, size_t table_size);
void unregister_net_sysctl_table(struct ctl_table_header *header);
#else
static inline int net_sysctl_init(void) { return 0; }
static inline struct ctl_table_header *register_net_sysctl_sz(struct net *net,
const char *path, struct ctl_table *table, size_t table_size)
{
return NULL;
}
static inline void unregister_net_sysctl_table(struct ctl_table_header *header)
{
}
#endif
static inline int rt_genid_ipv4(const struct net *net)
{ … }
#if IS_ENABLED(CONFIG_IPV6)
static inline int rt_genid_ipv6(const struct net *net)
{ … }
#endif
static inline void rt_genid_bump_ipv4(struct net *net)
{ … }
extern void (*__fib6_flush_trees)(struct net *net);
static inline void rt_genid_bump_ipv6(struct net *net)
{ … }
#if IS_ENABLED(CONFIG_IEEE802154_6LOWPAN)
static inline struct netns_ieee802154_lowpan *
net_ieee802154_lowpan(struct net *net)
{ … }
#endif
static inline void rt_genid_bump_all(struct net *net)
{ … }
static inline int fnhe_genid(const struct net *net)
{ … }
static inline void fnhe_genid_bump(struct net *net)
{ … }
#ifdef CONFIG_NET
void net_ns_init(void);
#else
static inline void net_ns_init(void) {}
#endif
#endif