linux/include/linux/utsname.h
<<
>>
Prefs
   1#ifndef _LINUX_UTSNAME_H
   2#define _LINUX_UTSNAME_H
   3
   4
   5#include <linux/sched.h>
   6#include <linux/kref.h>
   7#include <linux/nsproxy.h>
   8#include <linux/ns_common.h>
   9#include <linux/err.h>
  10#include <uapi/linux/utsname.h>
  11
  12enum uts_proc {
  13        UTS_PROC_OSTYPE,
  14        UTS_PROC_OSRELEASE,
  15        UTS_PROC_VERSION,
  16        UTS_PROC_HOSTNAME,
  17        UTS_PROC_DOMAINNAME,
  18};
  19
  20struct user_namespace;
  21extern struct user_namespace init_user_ns;
  22
  23struct uts_namespace {
  24        struct kref kref;
  25        struct new_utsname name;
  26        struct user_namespace *user_ns;
  27        struct ucounts *ucounts;
  28        struct ns_common ns;
  29};
  30extern struct uts_namespace init_uts_ns;
  31
  32#ifdef CONFIG_UTS_NS
  33static inline void get_uts_ns(struct uts_namespace *ns)
  34{
  35        kref_get(&ns->kref);
  36}
  37
  38extern struct uts_namespace *copy_utsname(unsigned long flags,
  39        struct user_namespace *user_ns, struct uts_namespace *old_ns);
  40extern void free_uts_ns(struct kref *kref);
  41
  42static inline void put_uts_ns(struct uts_namespace *ns)
  43{
  44        kref_put(&ns->kref, free_uts_ns);
  45}
  46#else
  47static inline void get_uts_ns(struct uts_namespace *ns)
  48{
  49}
  50
  51static inline void put_uts_ns(struct uts_namespace *ns)
  52{
  53}
  54
  55static inline struct uts_namespace *copy_utsname(unsigned long flags,
  56        struct user_namespace *user_ns, struct uts_namespace *old_ns)
  57{
  58        if (flags & CLONE_NEWUTS)
  59                return ERR_PTR(-EINVAL);
  60
  61        return old_ns;
  62}
  63#endif
  64
  65#ifdef CONFIG_PROC_SYSCTL
  66extern void uts_proc_notify(enum uts_proc proc);
  67#else
  68static inline void uts_proc_notify(enum uts_proc proc)
  69{
  70}
  71#endif
  72
  73static inline struct new_utsname *utsname(void)
  74{
  75        return &current->nsproxy->uts_ns->name;
  76}
  77
  78static inline struct new_utsname *init_utsname(void)
  79{
  80        return &init_uts_ns.name;
  81}
  82
  83extern struct rw_semaphore uts_sem;
  84
  85#endif /* _LINUX_UTSNAME_H */
  86