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