diff options
Diffstat (limited to 'include/linux/utsname.h')
-rw-r--r-- | include/linux/utsname.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/include/linux/utsname.h b/include/linux/utsname.h new file mode 100644 index 000000000..5093f58ae --- /dev/null +++ b/include/linux/utsname.h @@ -0,0 +1,84 @@ +#ifndef _LINUX_UTSNAME_H +#define _LINUX_UTSNAME_H + + +#include <linux/sched.h> +#include <linux/kref.h> +#include <linux/nsproxy.h> +#include <linux/ns_common.h> +#include <linux/err.h> +#include <uapi/linux/utsname.h> + +enum uts_proc { + UTS_PROC_OSTYPE, + UTS_PROC_OSRELEASE, + UTS_PROC_VERSION, + UTS_PROC_HOSTNAME, + UTS_PROC_DOMAINNAME, +}; + +struct user_namespace; +extern struct user_namespace init_user_ns; + +struct uts_namespace { + struct kref kref; + struct new_utsname name; + struct user_namespace *user_ns; + struct ns_common ns; +}; +extern struct uts_namespace init_uts_ns; + +#ifdef CONFIG_UTS_NS +static inline void get_uts_ns(struct uts_namespace *ns) +{ + kref_get(&ns->kref); +} + +extern struct uts_namespace *copy_utsname(unsigned long flags, + struct user_namespace *user_ns, struct uts_namespace *old_ns); +extern void free_uts_ns(struct kref *kref); + +static inline void put_uts_ns(struct uts_namespace *ns) +{ + kref_put(&ns->kref, free_uts_ns); +} +#else +static inline void get_uts_ns(struct uts_namespace *ns) +{ +} + +static inline void put_uts_ns(struct uts_namespace *ns) +{ +} + +static inline struct uts_namespace *copy_utsname(unsigned long flags, + struct user_namespace *user_ns, struct uts_namespace *old_ns) +{ + if (flags & CLONE_NEWUTS) + return ERR_PTR(-EINVAL); + + return old_ns; +} +#endif + +#ifdef CONFIG_PROC_SYSCTL +extern void uts_proc_notify(enum uts_proc proc); +#else +static inline void uts_proc_notify(enum uts_proc proc) +{ +} +#endif + +static inline struct new_utsname *utsname(void) +{ + return ¤t->nsproxy->uts_ns->name; +} + +static inline struct new_utsname *init_utsname(void) +{ + return &init_uts_ns.name; +} + +extern struct rw_semaphore uts_sem; + +#endif /* _LINUX_UTSNAME_H */ |