Line data Source code
1 : #ifndef _LINUX_UTSNAME_H
2 : #define _LINUX_UTSNAME_H
3 :
4 : #define __OLD_UTS_LEN 8
5 :
6 : struct oldold_utsname {
7 : char sysname[9];
8 : char nodename[9];
9 : char release[9];
10 : char version[9];
11 : char machine[9];
12 : };
13 :
14 : #define __NEW_UTS_LEN 64
15 :
16 : struct old_utsname {
17 : char sysname[65];
18 : char nodename[65];
19 : char release[65];
20 : char version[65];
21 : char machine[65];
22 : };
23 1 :
24 : struct new_utsname {
25 : char sysname[__NEW_UTS_LEN + 1];
26 : char nodename[__NEW_UTS_LEN + 1];
27 : char release[__NEW_UTS_LEN + 1];
28 : char version[__NEW_UTS_LEN + 1];
29 : char machine[__NEW_UTS_LEN + 1];
30 : char domainname[__NEW_UTS_LEN + 1];
31 : };
32 1 :
33 1 : #ifdef __KERNEL__
34 2 :
35 : #include <linux/sched.h>
36 : #include <linux/kref.h>
37 : #include <linux/nsproxy.h>
38 : #include <linux/err.h>
39 :
40 : struct uts_namespace {
41 : struct kref kref;
42 : struct new_utsname name;
43 : };
44 : extern struct uts_namespace init_uts_ns;
45 :
46 : #ifdef CONFIG_UTS_NS
47 : static inline void get_uts_ns(struct uts_namespace *ns)
48 : {
49 : kref_get(&ns->kref);
50 : }
51 :
52 : extern struct uts_namespace *copy_utsname(unsigned long flags,
53 : struct uts_namespace *ns);
54 : extern void free_uts_ns(struct kref *kref);
55 :
56 : static inline void put_uts_ns(struct uts_namespace *ns)
57 : {
58 : kref_put(&ns->kref, free_uts_ns);
59 : }
60 : #else
61 : static inline void get_uts_ns(struct uts_namespace *ns)
62 : {
63 : }
64 :
65 : static inline void put_uts_ns(struct uts_namespace *ns)
66 : {
67 : }
68 :
69 : static inline struct uts_namespace *copy_utsname(unsigned long flags,
70 : struct uts_namespace *ns)
71 : {
72 : if (flags & CLONE_NEWUTS)
73 : return ERR_PTR(-EINVAL);
74 :
75 : return ns;
76 : }
77 : #endif
78 :
79 : static inline struct new_utsname *utsname(void)
80 : {
81 4 : return ¤t->nsproxy->uts_ns->name;
82 : }
83 :
84 : static inline struct new_utsname *init_utsname(void)
85 : {
86 : return &init_uts_ns.name;
87 : }
88 :
89 : extern struct rw_semaphore uts_sem;
90 :
91 : #endif /* __KERNEL__ */
92 :
93 : #endif /* _LINUX_UTSNAME_H */
|