Add headers for OpenSolaris extensions that glibc implements
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / sys / zone.h
1 /* Declarations of zone functions and types.
2    Copyright (C) 2008 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #ifndef _SYS_ZONE_H
21 #define _SYS_ZONE_H
22
23 #include <sys/types.h>
24 #include <sys/priv.h>
25 #include <sys/uadmin.h>
26 #include <sys/param.h>
27
28 typedef struct _mac_label_impl m_label_t;
29 typedef m_label_t bslabel_t;
30
31 /* Subcall numbers.  */
32 #define ZONE_CREATE     0
33 #define ZONE_DESTROY    1
34 #define ZONE_GETATTR    2
35 #define ZONE_ENTER      3
36 #define ZONE_LIST       4
37 #define ZONE_SHUTDOWN   5
38 #define ZONE_LOOKUP     6
39 #define ZONE_BOOT       7
40 #define ZONE_VERSION    8
41 #define ZONE_SETATTR    9
42 #define ZONE_ADD_DATALINK       10
43 #define ZONE_DEL_DATALINK       11
44 #define ZONE_CHECK_DATALINK     12
45 #define ZONE_LIST_DATALINK      13
46
47 /* Miscellaneous.  */
48 #define GLOBAL_ZONEID   0
49 #define GLOBAL_ZONENAME "global"
50 #define MIN_ZONEID      0
51 #define MIN_USERZONEID  1
52 #define MAX_ZONEID      9999
53 #define ZONEID_WIDTH    4
54 #define ALL_ZONES       (-1)
55 #define ZONENAME_MAX    64
56 #define ZONENAME_REGEXP "[a-zA-Z0-9][-_.a-zA-Z0-9]{0,62}"
57 #define ZONES_TMPDIR    "/var/run/zones"
58 #define ZONE_DOOR_PATH  ZONES_TMPDIR "/%s.zoneadmd_door"
59
60 /* Zone attributes.  */
61 #define ZONE_ATTR_ROOT          1
62 #define ZONE_ATTR_NAME          2
63 #define ZONE_ATTR_STATUS        3
64 #define ZONE_ATTR_PRIVSET       4
65 #define ZONE_ATTR_UNIQID        5
66 #define ZONE_ATTR_POOLID        6
67 #define ZONE_ATTR_INITPID       7
68 #define ZONE_ATTR_SLBL          8
69 #define ZONE_ATTR_INITNAME      9
70 #define ZONE_ATTR_BOOTARGS      10
71 #define ZONE_ATTR_BRAND         11
72 #define ZONE_ATTR_PHYS_MCAP     12
73 #define ZONE_ATTR_SCHED_CLASS   13
74 #define ZONE_ATTR_FLAGS         14
75 #define ZONE_ATTR_BRAND_ATTRS   32768
76
77 /* Zone event strings. */
78 #define ZONE_EVENT_CHANNEL              "com.sun:zones:status"
79 #define ZONE_EVENT_STATUS_CLASS         "status"
80 #define ZONE_EVENT_STATUS_SUBCLASS      "change"
81 #define ZONE_EVENT_UNINITIALIZED        "uninitialized"
82 #define ZONE_EVENT_INITIALIZED          "initialized"
83 #define ZONE_EVENT_READY                "ready"
84 #define ZONE_EVENT_RUNNING              "running"
85 #define ZONE_EVENT_SHUTTING_DOWN        "shutting_down"
86
87 #define ZONE_CB_NAME            "zonename"
88 #define ZONE_CB_NEWSTATE        "newstate"
89 #define ZONE_CB_OLDSTATE        "oldstate"
90 #define ZONE_CB_TIMESTAMP       "when"
91 #define ZONE_CB_ZONEID          "zoneid"
92
93 /* Zone flags.  */
94 #define ZF_HASHED_LABEL 0x2
95 #define ZF_IS_SCRATCH   0x4
96 #define ZF_NET_EXCL     0x8
97
98 /* Zone create flags.  */
99 #define ZCF_NET_EXCL    0x1
100
101 /* Exit values.  */
102 #define ZONE_SUBPROC_OK                 0
103 #define ZONE_SUBPROC_USAGE              253
104 #define ZONE_SUBPROC_NOTCOMPLETE        254
105 #define ZONE_SUBPROC_FATAL              255
106
107 typedef enum
108   {
109         ZONE_IS_UNINITIALIZED = 0,
110         ZONE_IS_INITIALIZED,
111         ZONE_IS_READY,
112         ZONE_IS_BOOTING,
113         ZONE_IS_RUNNING,
114         ZONE_IS_SHUTTING_DOWN,
115         ZONE_IS_EMPTY,
116         ZONE_IS_DOWN,
117         ZONE_IS_DYING,
118         ZONE_IS_DEAD
119   } zone_status_t;
120 #define ZONE_MIN_STATE  ZONE_IS_UNINITIALIZED
121 #define ZONE_MAX_STATE  ZONE_IS_DEAD
122
123 typedef struct
124   {
125         const char *zone_name;
126         const char *zone_root;
127         const struct priv_set *zone_privs;
128         size_t zone_privssz;
129         const char *rctlbuf;
130         size_t rctlbufsz;
131         int *extended_error;
132         const char *zfsbuf;
133         size_t zfsbufsz;
134         int match;
135         uint32_t doi;
136         const bslabel_t *label;
137         int flags;
138   } zone_def;
139
140 typedef enum zone_cmd
141   {
142         Z_READY,
143         Z_BOOT,
144         Z_FORCEBOOT,
145         Z_REBOOT,
146         Z_HALT,
147         Z_NOTE_UNINSTALLING,
148         Z_MOUNT,
149         Z_FORCEMOUNT,
150         Z_UNMOUNT
151   } zone_cmd_t;
152
153 typedef struct zone_cmd_arg
154   {
155         uint64_t uniqid;
156         zone_cmd_t cmd;
157         uint32_t _pad;
158         char locale[MAXPATHLEN];
159         char bootbuf[BOOTARGS_MAX];
160   } zone_cmd_arg_t;
161
162 typedef struct zone_cmd_rval
163   {
164         int rval;
165         char errbuf[1];
166   } zone_cmd_rval_t;
167
168 #endif /* _SYS_ZONE_H */