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