usr/src/uts/common/sys/zone.h
author jpk
Fri, 24 Mar 2006 12:29:20 -0800
changeset 1676 37f4a3e2bd99
parent 1166 1eedf65f1c9f
child 1769 338500d67d4f
permissions -rw-r--r--
PSARC/2002/762 Layered Trusted Solaris PSARC/2005/060 TSNET: Trusted Networking with Security Labels PSARC/2005/259 Layered Trusted Solaris Label Interfaces PSARC/2005/573 Solaris Trusted Extensions for Printing PSARC/2005/691 Trusted Extensions for Device Allocation PSARC/2005/723 Solaris Trusted Extensions Filesystem Labeling PSARC/2006/009 Labeled Auditing PSARC/2006/155 Trusted Extensions RBAC Changes PSARC/2006/191 is_system_labeled 6293271 Zone processes should use zone_kcred instead of kcred 6394554 integrate Solaris Trusted Extensions
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
     5
 * Common Development and Distribution License (the "License").
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    22
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#ifndef _SYS_ZONE_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#define	_SYS_ZONE_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#include <sys/mutex.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#include <sys/param.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <sys/rctl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <sys/pset.h>
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    36
#include <sys/tsol/label.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 * NOTE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * The contents of this file are private to the implementation of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 * Solaris and are subject to change at any time without notice.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * Applications and drivers using these interfaces may fail to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 * run on future releases.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
/* Available both in kernel and for user space */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
/* zone id restrictions and special ids */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
#define	MAX_ZONEID	9999
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
#define	MIN_USERZONEID	1	/* lowest user-creatable zone ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
#define	MIN_ZONEID	0	/* minimum zone ID on system */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
#define	GLOBAL_ZONEID	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
#define	ZONEID_WIDTH	4	/* for printf */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    60
/*
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    61
 * Special zoneid_t token to refer to all zones.
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    62
 */
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    63
#define	ALL_ZONES	(-1)
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    64
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
/* system call subcodes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
#define	ZONE_CREATE	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
#define	ZONE_DESTROY	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
#define	ZONE_GETATTR	2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
#define	ZONE_ENTER	3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
#define	ZONE_LIST	4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
#define	ZONE_SHUTDOWN	5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
#define	ZONE_LOOKUP	6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
#define	ZONE_BOOT	7
813
0e6d3e880863 6317239 zone(2) needs subcode to query API version
dp
parents: 789
diff changeset
    74
#define	ZONE_VERSION	8
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
/* zone attributes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
#define	ZONE_ATTR_ROOT		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
#define	ZONE_ATTR_NAME		2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
#define	ZONE_ATTR_STATUS	3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
#define	ZONE_ATTR_PRIVSET	4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
#define	ZONE_ATTR_UNIQID	5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
#define	ZONE_ATTR_POOLID	6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
#define	ZONE_ATTR_INITPID	7
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    84
#define	ZONE_ATTR_SLBL		8
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
1166
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    86
#define	ZONE_EVENT_CHANNEL	"com.sun:zones:status"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    87
#define	ZONE_EVENT_STATUS_CLASS	"status"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    88
#define	ZONE_EVENT_STATUS_SUBCLASS	"change"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    89
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    90
#define	ZONE_EVENT_UNINITIALIZED	"uninitialized"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    91
#define	ZONE_EVENT_READY		"ready"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    92
#define	ZONE_EVENT_RUNNING		"running"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    93
#define	ZONE_EVENT_SHUTTING_DOWN	"shutting_down"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    94
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    95
#define	ZONE_CB_NAME		"zonename"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    96
#define	ZONE_CB_NEWSTATE	"newstate"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    97
#define	ZONE_CB_OLDSTATE	"oldstate"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    98
#define	ZONE_CB_TIMESTAMP	"when"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
    99
#define	ZONE_CB_ZONEID		"zoneid"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   100
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
#ifdef _SYSCALL32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
typedef struct {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
	caddr32_t zone_name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	caddr32_t zone_root;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
	caddr32_t zone_privs;
813
0e6d3e880863 6317239 zone(2) needs subcode to query API version
dp
parents: 789
diff changeset
   106
	size32_t zone_privssz;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	caddr32_t rctlbuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	size32_t rctlbufsz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	caddr32_t extended_error;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   110
	caddr32_t zfsbuf;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   111
	size32_t  zfsbufsz;
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   112
	int match;
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   113
	int doi;
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   114
	caddr32_t label;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
} zone_def32;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
typedef struct {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
	const char *zone_name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
	const char *zone_root;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
	const struct priv_set *zone_privs;
813
0e6d3e880863 6317239 zone(2) needs subcode to query API version
dp
parents: 789
diff changeset
   121
	size_t zone_privssz;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
	const char *rctlbuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	size_t rctlbufsz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
	int *extended_error;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   125
	const char *zfsbuf;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   126
	size_t zfsbufsz;
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   127
	int match;			/* match level */
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   128
	int doi;			/* DOI for label */
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   129
	const bslabel_t *label;		/* label associated with zone */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
} zone_def;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
/* extended error information */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
#define	ZE_UNKNOWN	0	/* No extended error info */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
#define	ZE_CHROOTED	1	/* tried to zone_create from chroot */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
#define	ZE_AREMOUNTS	2	/* there are mounts within the zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
/* zone_status */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
typedef enum {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
	ZONE_IS_UNINITIALIZED = 0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	ZONE_IS_READY,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
	ZONE_IS_BOOTING,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
	ZONE_IS_RUNNING,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	ZONE_IS_SHUTTING_DOWN,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
	ZONE_IS_EMPTY,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
	ZONE_IS_DOWN,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
	ZONE_IS_DYING,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
	ZONE_IS_DEAD
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
} zone_status_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
#define	ZONE_MIN_STATE		ZONE_IS_UNINITIALIZED
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
#define	ZONE_MAX_STATE		ZONE_IS_DEAD
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
 * Valid commands which may be issued by zoneadm to zoneadmd.  The kernel also
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
 * communicates with zoneadmd, but only uses Z_REBOOT and Z_HALT.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
typedef enum zone_cmd {
766
c521de78a32f PSARC 2005/474 Zones Upgrade (Ashanti and Zulu)
carlsonj
parents: 0
diff changeset
   157
	Z_READY, Z_BOOT, Z_REBOOT, Z_HALT, Z_NOTE_UNINSTALLING,
c521de78a32f PSARC 2005/474 Zones Upgrade (Ashanti and Zulu)
carlsonj
parents: 0
diff changeset
   158
	Z_MOUNT, Z_UNMOUNT
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
} zone_cmd_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
#define	ZONEBOOTARGS_MAX	257	/* uadmin()'s buffer is 257 bytes. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
 * The structure of a request to zoneadmd.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
typedef struct zone_cmd_arg {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
	uint64_t	uniqid;		/* unique "generation number" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	zone_cmd_t	cmd;		/* requested action */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
	char locale[MAXPATHLEN];	/* locale in which to render messages */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	char bootbuf[ZONEBOOTARGS_MAX];	/* arguments passed to zone_boot() */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
} zone_cmd_arg_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
 * Structure of zoneadmd's response to a request.  A NULL return value means
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
 * the caller should attempt to restart zoneadmd and retry.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
typedef struct zone_cmd_rval {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	int rval;			/* return value of request */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	char errbuf[1];	/* variable-sized buffer containing error messages */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
} zone_cmd_rval_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
 * The zone support infrastructure uses the zone name as a component
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
 * of unix domain (AF_UNIX) sockets, which are limited to 108 characters
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
 * in length, so ZONENAME_MAX is limited by that.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
#define	ZONENAME_MAX		64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
#define	GLOBAL_ZONENAME		"global"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
 * Extended Regular expression (see regex(5)) which matches all valid zone
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
 * names.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
#define	ZONENAME_REGEXP		"[a-zA-Z0-9][-_.a-zA-Z0-9]{0,62}"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
 * Where the zones support infrastructure places temporary files.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
#define	ZONES_TMPDIR		"/var/run/zones"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
 * The path to the door used by clients to communicate with zoneadmd.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
#define	ZONE_DOOR_PATH		ZONES_TMPDIR "/%s.zoneadmd_door"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
 * We need to protect the definition of 'list_t' from userland applications and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
 * libraries which may be defining ther own versions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
#include <sys/list.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
#define	GLOBAL_ZONEUNIQID	0	/* uniqid of the global zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
/* zone_flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
#define	ZF_DESTROYED		0x1	/* ZSD destructor callbacks run */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
struct pool;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   221
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   222
 * Structure to record list of ZFS datasets exported to a zone.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   223
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   224
typedef struct zone_dataset {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   225
	char		*zd_dataset;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   226
	list_node_t	zd_linkage;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   227
} zone_dataset_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   228
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
typedef struct zone {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
	 * zone_name is never modified once set.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
	char		*zone_name;	/* zone's configuration name */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
	 * zone_nodename and zone_domain are never freed once allocated.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
	char		*zone_nodename;	/* utsname.nodename equivalent */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
	char		*zone_domain;	/* srpc_domain equivalent */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
	 * zone_lock protects the following fields of a zone_t:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
	 * 	zone_ref
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
	 * 	zone_cred_ref
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
	 * 	zone_ntasks
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
	 * 	zone_flags
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
	 * 	zone_zsd
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
	kmutex_t	zone_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
	 * zone_linkage is the zone's linkage into the active or
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
	 * death-row list.  The field is protected by zonehash_lock.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
	list_node_t	zone_linkage;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
	zoneid_t	zone_id;	/* ID of zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
	uint_t		zone_ref;	/* count of zone_hold()s on zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
	uint_t		zone_cred_ref;	/* count of zone_hold_cred()s on zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
	 * zone_rootvp and zone_rootpath can never be modified once set.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
	struct vnode	*zone_rootvp;	/* zone's root vnode */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
	char		*zone_rootpath;	/* Path to zone's root + '/' */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
	ushort_t	zone_flags;	/* misc flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
	zone_status_t	zone_status;	/* protected by zone_status_lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
	uint_t		zone_ntasks;	/* number of tasks executing in zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
	kmutex_t	zone_nlwps_lock; /* protects zone_nlwps, and *_nlwps */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
					/* counters in projects and tasks */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
					/* that are within the zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
	rctl_qty_t	zone_nlwps;	/* number of lwps in zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
	rctl_qty_t	zone_nlwps_ctl; /* protected by zone_rctls->rcs_lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
	uint_t		zone_rootpathlen; /* strlen(zone_rootpath) + 1 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
	uint32_t	zone_shares;	/* FSS shares allocated to zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	rctl_set_t	*zone_rctls;	/* zone-wide (zone.*) rctls */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
	list_t		zone_zsd;	/* list of Zone-Specific Data values */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
	kcondvar_t	zone_cv;	/* used to signal state changes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
	struct proc	*zone_zsched;	/* Dummy kernel "zsched" process */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
	pid_t		zone_proc_initpid; /* pid of "init" for this zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
	int		zone_boot_err;  /* for zone_boot() if boot fails */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
	char		*zone_bootargs;	/* arguments passed via zone_boot() */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
	 * zone_kthreads is protected by zone_status_lock.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
	kthread_t	*zone_kthreads;	/* kernel threads in zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
	struct priv_set	*zone_privset;	/* limit set for zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
	 * zone_vfslist is protected by vfs_list_lock().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
	struct vfs	*zone_vfslist;	/* list of FS's mounted in zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
	uint64_t	zone_uniqid;	/* unique zone generation number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
	struct cred	*zone_kcred;	/* kcred-like, zone-limited cred */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
	 * zone_pool is protected by pool_lock().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
	struct pool	*zone_pool;	/* pool the zone is bound to */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	hrtime_t	zone_pool_mod;	/* last pool bind modification time */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
	/* zone_psetid is protected by cpu_lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
	psetid_t	zone_psetid;	/* pset the zone is bound to */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
	 * The following two can be read without holding any locks.  They are
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
	 * updated under cpu_lock.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
	int		zone_ncpus;  /* zone's idea of ncpus */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
	int		zone_ncpus_online; /* zone's idea of ncpus_online */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   303
	/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   304
	 * List of ZFS datasets exported to this zone.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   305
	 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   306
	list_t		zone_datasets;	/* list of datasets */
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   307
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   308
	ts_label_t	*zone_slabel;
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   309
	int		zone_match;
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   310
	tsol_mlp_list_t zone_mlps;	/* MLPs on zone-private addresses */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
} zone_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
 * Special value of zone_psetid to indicate that pools are disabled.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
#define	ZONE_PS_INVAL	PS_MYID
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
extern zone_t zone0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
extern zone_t *global_zone;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
extern uint_t maxzones;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
extern rctl_hndl_t rc_zone_nlwps;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
extern const char * const zone_initname;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   325
extern long zone(int, void *, void *, void *, void *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
extern void zone_zsd_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
extern void zone_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
extern void zone_hold(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
extern void zone_rele(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
extern void zone_cred_hold(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
extern void zone_cred_rele(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
extern void zone_task_hold(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
extern void zone_task_rele(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
extern zone_t *zone_find_by_id(zoneid_t);
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   335
extern zone_t *zone_find_by_label(const ts_label_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
extern zone_t *zone_find_by_name(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
extern zone_t *zone_find_by_path(const char *);
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   338
extern zone_t *zone_find_by_any_path(const char *, boolean_t);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
extern zoneid_t getzoneid(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
 * Zone-specific data (ZSD) APIs
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
 * The following is what code should be initializing its zone_key_t to if it
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
 * calls zone_getspecific() without necessarily knowing that zone_key_create()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
 * has been called on the key.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
#define	ZONE_KEY_UNINITIALIZED	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
typedef uint_t zone_key_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
extern void	zone_key_create(zone_key_t *, void *(*)(zoneid_t),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
    void (*)(zoneid_t, void *), void (*)(zoneid_t, void *));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
extern int 	zone_key_delete(zone_key_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
extern void	*zone_getspecific(zone_key_t, zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
extern int	zone_setspecific(zone_key_t, zone_t *, const void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
 * The definition of a zsd_entry is truly private to zone.c and is only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
 * placed here so it can be shared with mdb.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
struct zsd_entry {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
	zone_key_t		zsd_key;	/* Key used to lookup value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
	void			*zsd_data;	/* Caller-managed value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
	 * Callbacks to be executed when a zone is created, shutdown, and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
	 * destroyed, respectively.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
	void			*(*zsd_create)(zoneid_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
	void			(*zsd_shutdown)(zoneid_t, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
	void			(*zsd_destroy)(zoneid_t, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
	list_node_t		zsd_linkage;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
 * Macros to help with zone visibility restrictions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
 * Is process in the global zone?
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
#define	INGLOBALZONE(p) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
	((p)->p_zone == global_zone)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
 * Can process view objects in given zone?
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
#define	HASZONEACCESS(p, zoneid) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
	((p)->p_zone->zone_id == (zoneid) || INGLOBALZONE(p))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
 * Convenience macro to see if a resolved path is visible from within a
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
 * given zone.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
 * The basic idea is that the first (zone_rootpathlen - 1) bytes of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
 * two strings must be equal.  Since the rootpathlen has a trailing '/',
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
 * we want to skip everything in the path up to (but not including) the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
 * trailing '/'.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
#define	ZONE_PATH_VISIBLE(path, zone) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
	(strncmp((path), (zone)->zone_rootpath,		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
	    (zone)->zone_rootpathlen - 1) == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
 * Convenience macro to go from the global view of a path to that seen
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
 * from within said zone.  It is the responsibility of the caller to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
 * ensure that the path is a resolved one (ie, no '..'s or '.'s), and is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
 * in fact visible from within the zone.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
#define	ZONE_PATH_TRANSLATE(path, zone)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
	(ASSERT(ZONE_PATH_VISIBLE(path, zone)),	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
	(path) + (zone)->zone_rootpathlen - 2)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
 * Special processes visible in all zones.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
#define	ZONE_SPECIALPID(x)	 ((x) == 0 || (x) == 1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
 * Zone-safe version of thread_create() to be used when the caller wants to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
 * create a kernel thread to run within the current zone's context.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
extern kthread_t *zthread_create(caddr_t, size_t, void (*)(), void *, size_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
    pri_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
extern void zthread_exit(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
 * Functions for an external observer to register interest in a zone's status
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
 * change.  Observers will be woken up when the zone status equals the status
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
 * argument passed in (in the case of zone_status_timedwait, the function may
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
 * also return because of a timeout; zone_status_wait_sig may return early due
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
 * to a signal being delivered; zone_status_timedwait_sig may return for any of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
 * the above reasons).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
 * Otherwise these behave identically to cv_timedwait(), cv_wait(), and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
 * cv_wait_sig() respectively.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
extern clock_t zone_status_timedwait(zone_t *, clock_t, zone_status_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
extern clock_t zone_status_timedwait_sig(zone_t *, clock_t, zone_status_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
extern void zone_status_wait(zone_t *, zone_status_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
extern int zone_status_wait_sig(zone_t *, zone_status_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
 * Get the status  of the zone (at the time it was called).  The state may
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
 * have progressed by the time it is returned.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   447
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
extern zone_status_t zone_status_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
 * Get the "kcred" credentials corresponding to the given zone.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
extern struct cred *zone_get_kcred(zoneid_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
 * Get/set the pool the zone is currently bound to.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
extern struct pool *zone_pool_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
extern void zone_pool_set(zone_t *, struct pool *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
 * Get/set the pset the zone is currently using.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
extern psetid_t zone_pset_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
extern void zone_pset_set(zone_t *, psetid_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
 * Get the number of cpus/online-cpus visible from the given zone.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
extern int zone_ncpus_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
extern int zone_ncpus_online_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   474
 * Returns true if the named pool/dataset is visible in the current zone.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   475
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   476
extern int zone_dataset_visible(const char *, int *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   477
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   478
/*
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
 * zone version of uadmin()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
extern int zone_uadmin(int, int, struct cred *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
extern void zone_shutdown_global(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
extern void mount_in_progress(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
extern void mount_completed(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
extern int zone_walk(int (*)(zone_t *, void *), void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   488
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   489
#endif	/* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   490
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   491
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   492
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   493
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   494
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
#endif	/* _SYS_ZONE_H */