usr/src/uts/common/sys/zone.h
author akolb
Fri, 09 Mar 2007 15:55:28 -0800
changeset 3792 57ba782523b7
parent 3448 aaf16568054b
child 4197 9335c9d052a6
permissions -rw-r--r--
PSARC/2004/402 CPU Caps 6327235 PSARC/2004/402 CPU caps 6464161 Dead KSLICE code should be removed 6514387 FX class contains dead code to keep list of member threads 6518395 kstat_zone_add performs KM_SLEEP allocation when it should not
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
/*
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    22
 * Copyright 2007 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>
2677
212d61b14a8b PSARC/2006/451 System V resource controls for Zones
ml93401
parents: 2267
diff changeset
    35
#include <sys/ipc_rctl.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/pset.h>
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    37
#include <sys/tsol/label.h>
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    38
#include <sys/cred.h>
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    39
#include <sys/netstack.h>
2267
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
    40
#include <sys/uadmin.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * NOTE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 * The contents of this file are private to the implementation of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 * Solaris and are subject to change at any time without notice.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 * Applications and drivers using these interfaces may fail to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 * run on future releases.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
/* Available both in kernel and for user space */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
/* zone id restrictions and special ids */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
#define	MAX_ZONEID	9999
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
#define	MIN_USERZONEID	1	/* lowest user-creatable zone ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
#define	MIN_ZONEID	0	/* minimum zone ID on system */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
#define	GLOBAL_ZONEID	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
#define	ZONEID_WIDTH	4	/* for printf */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    64
/*
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    65
 * Special zoneid_t token to refer to all zones.
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    66
 */
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    67
#define	ALL_ZONES	(-1)
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    68
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
/* system call subcodes */
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    70
#define	ZONE_CREATE		0
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    71
#define	ZONE_DESTROY		1
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    72
#define	ZONE_GETATTR		2
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    73
#define	ZONE_ENTER		3
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    74
#define	ZONE_LIST		4
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    75
#define	ZONE_SHUTDOWN		5
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    76
#define	ZONE_LOOKUP		6
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    77
#define	ZONE_BOOT		7
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    78
#define	ZONE_VERSION		8
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    79
#define	ZONE_SETATTR		9
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    80
#define	ZONE_ADD_DATALINK	10
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    81
#define	ZONE_DEL_DATALINK	11
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    82
#define	ZONE_CHECK_DATALINK	12
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    83
#define	ZONE_LIST_DATALINK	13
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
/* zone attributes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
#define	ZONE_ATTR_ROOT		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
#define	ZONE_ATTR_NAME		2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
#define	ZONE_ATTR_STATUS	3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
#define	ZONE_ATTR_PRIVSET	4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
#define	ZONE_ATTR_UNIQID	5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
#define	ZONE_ATTR_POOLID	6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
#define	ZONE_ATTR_INITPID	7
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
    93
#define	ZONE_ATTR_SLBL		8
2267
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
    94
#define	ZONE_ATTR_INITNAME	9
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
    95
#define	ZONE_ATTR_BOOTARGS	10
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
    96
#define	ZONE_ATTR_BRAND		11
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
    97
#define	ZONE_ATTR_PHYS_MCAP	12
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
    98
#define	ZONE_ATTR_SCHED_CLASS	13
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
    99
#define	ZONE_ATTR_FLAGS		14
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   100
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   101
/* Start of the brand-specific attribute namespace */
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   102
#define	ZONE_ATTR_BRAND_ATTRS	32768
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
1166
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   104
#define	ZONE_EVENT_CHANNEL	"com.sun:zones:status"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   105
#define	ZONE_EVENT_STATUS_CLASS	"status"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   106
#define	ZONE_EVENT_STATUS_SUBCLASS	"change"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   107
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   108
#define	ZONE_EVENT_UNINITIALIZED	"uninitialized"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   109
#define	ZONE_EVENT_READY		"ready"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   110
#define	ZONE_EVENT_RUNNING		"running"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   111
#define	ZONE_EVENT_SHUTTING_DOWN	"shutting_down"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   112
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   113
#define	ZONE_CB_NAME		"zonename"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   114
#define	ZONE_CB_NEWSTATE	"newstate"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   115
#define	ZONE_CB_OLDSTATE	"oldstate"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   116
#define	ZONE_CB_TIMESTAMP	"when"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   117
#define	ZONE_CB_ZONEID		"zoneid"
1eedf65f1c9f PSARC/2005/607 Zone Events for Sun Cluster
dstaff
parents: 813
diff changeset
   118
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   119
/*
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   120
 * Exit values that may be returned by scripts or programs invoked by various
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   121
 * zone commands.
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   122
 *
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   123
 * These are defined as:
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   124
 *
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   125
 *	ZONE_SUBPROC_OK
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   126
 *	===============
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   127
 *	The subprocess completed successfully.
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   128
 *
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   129
 *	ZONE_SUBPROC_USAGE
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   130
 *	==================
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   131
 *	The subprocess failed with a usage message, or a usage message should
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   132
 *	be output in its behalf.
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   133
 *
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   134
 *	ZONE_SUBPROC_NOTCOMPLETE
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   135
 *	========================
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   136
 *	The subprocess did not complete, but the actions performed by the
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   137
 *	subprocess require no recovery actions by the user.
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   138
 *
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   139
 *	For example, if the subprocess were called by "zoneadm install," the
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   140
 *	installation of the zone did not succeed but the user need not perform
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   141
 *	a "zoneadm uninstall" before attempting another install.
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   142
 *
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   143
 *	ZONE_SUBPROC_FATAL
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   144
 *	==================
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   145
 *	The subprocess failed in a fatal manner, usually one that will require
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   146
 *	some type of recovery action by the user.
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   147
 *
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   148
 *	For example, if the subprocess were called by "zoneadm install," the
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   149
 *	installation of the zone did not succeed and the user will need to
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   150
 *	perform a "zoneadm uninstall" before another install attempt is
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   151
 *	possible.
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   152
 *
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   153
 *	The non-success exit values are large to avoid accidental collision
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   154
 *	with values used internally by some commands (e.g. "Z_ERR" and
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   155
 *	"Z_USAGE" as used by zoneadm.)
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   156
 */
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   157
#define	ZONE_SUBPROC_OK			0
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   158
#define	ZONE_SUBPROC_USAGE		253
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   159
#define	ZONE_SUBPROC_NOTCOMPLETE	254
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   160
#define	ZONE_SUBPROC_FATAL		255
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   161
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
#ifdef _SYSCALL32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
typedef struct {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
	caddr32_t zone_name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
	caddr32_t zone_root;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
	caddr32_t zone_privs;
813
0e6d3e880863 6317239 zone(2) needs subcode to query API version
dp
parents: 789
diff changeset
   167
	size32_t zone_privssz;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	caddr32_t rctlbuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
	size32_t rctlbufsz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	caddr32_t extended_error;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   171
	caddr32_t zfsbuf;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   172
	size32_t  zfsbufsz;
2110
31cba59b38be 6403267 address remaining issues raised during TX code reviews
rica
parents: 1769
diff changeset
   173
	int match;			/* match level */
31cba59b38be 6403267 address remaining issues raised during TX code reviews
rica
parents: 1769
diff changeset
   174
	uint32_t doi;			/* DOI for label */
31cba59b38be 6403267 address remaining issues raised during TX code reviews
rica
parents: 1769
diff changeset
   175
	caddr32_t label;		/* label associated with zone */
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   176
	int flags;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
} zone_def32;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
typedef struct {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
	const char *zone_name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	const char *zone_root;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
	const struct priv_set *zone_privs;
813
0e6d3e880863 6317239 zone(2) needs subcode to query API version
dp
parents: 789
diff changeset
   183
	size_t zone_privssz;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	const char *rctlbuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
	size_t rctlbufsz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	int *extended_error;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   187
	const char *zfsbuf;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   188
	size_t zfsbufsz;
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   189
	int match;			/* match level */
2110
31cba59b38be 6403267 address remaining issues raised during TX code reviews
rica
parents: 1769
diff changeset
   190
	uint32_t doi;			/* DOI for label */
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   191
	const bslabel_t *label;		/* label associated with zone */
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   192
	int flags;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
} zone_def;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
/* extended error information */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
#define	ZE_UNKNOWN	0	/* No extended error info */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
#define	ZE_CHROOTED	1	/* tried to zone_create from chroot */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
#define	ZE_AREMOUNTS	2	/* there are mounts within the zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
/* zone_status */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
typedef enum {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
	ZONE_IS_UNINITIALIZED = 0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	ZONE_IS_READY,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
	ZONE_IS_BOOTING,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	ZONE_IS_RUNNING,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
	ZONE_IS_SHUTTING_DOWN,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
	ZONE_IS_EMPTY,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
	ZONE_IS_DOWN,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	ZONE_IS_DYING,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	ZONE_IS_DEAD
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
} zone_status_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
#define	ZONE_MIN_STATE		ZONE_IS_UNINITIALIZED
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
#define	ZONE_MAX_STATE		ZONE_IS_DEAD
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
 * Valid commands which may be issued by zoneadm to zoneadmd.  The kernel also
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
 * communicates with zoneadmd, but only uses Z_REBOOT and Z_HALT.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
typedef enum zone_cmd {
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   220
	Z_READY, Z_BOOT, Z_FORCEBOOT, Z_REBOOT, Z_HALT, Z_NOTE_UNINSTALLING,
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   221
	Z_MOUNT, Z_FORCEMOUNT, Z_UNMOUNT
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
} zone_cmd_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
 * The structure of a request to zoneadmd.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
typedef struct zone_cmd_arg {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
	uint64_t	uniqid;		/* unique "generation number" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
	zone_cmd_t	cmd;		/* requested action */
2267
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
   230
	uint32_t	_pad;		/* need consistent 32/64 bit alignmt */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
	char locale[MAXPATHLEN];	/* locale in which to render messages */
2267
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
   232
	char bootbuf[BOOTARGS_MAX];	/* arguments passed to zone_boot() */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
} zone_cmd_arg_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
 * Structure of zoneadmd's response to a request.  A NULL return value means
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
 * the caller should attempt to restart zoneadmd and retry.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
typedef struct zone_cmd_rval {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
	int rval;			/* return value of request */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
	char errbuf[1];	/* variable-sized buffer containing error messages */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
} zone_cmd_rval_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
 * The zone support infrastructure uses the zone name as a component
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
 * of unix domain (AF_UNIX) sockets, which are limited to 108 characters
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
 * in length, so ZONENAME_MAX is limited by that.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
#define	ZONENAME_MAX		64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
#define	GLOBAL_ZONENAME		"global"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
 * Extended Regular expression (see regex(5)) which matches all valid zone
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
 * names.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
#define	ZONENAME_REGEXP		"[a-zA-Z0-9][-_.a-zA-Z0-9]{0,62}"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
 * Where the zones support infrastructure places temporary files.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
#define	ZONES_TMPDIR		"/var/run/zones"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
 * The path to the door used by clients to communicate with zoneadmd.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
#define	ZONE_DOOR_PATH		ZONES_TMPDIR "/%s.zoneadmd_door"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   269
/* zone_flags */
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   270
#define	ZF_DESTROYED		0x1	/* ZSD destructor callbacks run */
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   271
#define	ZF_HASHED_LABEL		0x2	/* zone has a unique label */
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   272
#define	ZF_IS_SCRATCH		0x4	/* scratch zone */
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   273
#define	ZF_NET_EXCL		0x8	/* Zone has an exclusive IP stack */
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   274
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   275
/* zone_create flags */
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   276
#define	ZCF_NET_EXCL		0x1	/* Create a zone with exclusive IP */
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   277
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
 * We need to protect the definition of 'list_t' from userland applications and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
 * libraries which may be defining ther own versions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
#include <sys/list.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
#define	GLOBAL_ZONEUNIQID	0	/* uniqid of the global zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
struct pool;
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   288
struct brand;
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   289
struct dlnamelist;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   291
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   292
 * Structure to record list of ZFS datasets exported to a zone.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   293
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   294
typedef struct zone_dataset {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   295
	char		*zd_dataset;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   296
	list_node_t	zd_linkage;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   297
} zone_dataset_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   298
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   299
/*
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   300
 * structure for zone kstats
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   301
 */
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   302
typedef struct zone_kstat {
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   303
	kstat_named_t zk_zonename;
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   304
	kstat_named_t zk_usage;
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   305
	kstat_named_t zk_value;
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   306
} zone_kstat_t;
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   307
3792
57ba782523b7 PSARC/2004/402 CPU Caps
akolb
parents: 3448
diff changeset
   308
struct cpucap;
57ba782523b7 PSARC/2004/402 CPU Caps
akolb
parents: 3448
diff changeset
   309
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
typedef struct zone {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
	 * zone_name is never modified once set.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
	char		*zone_name;	/* zone's configuration name */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
	 * zone_nodename and zone_domain are never freed once allocated.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
	char		*zone_nodename;	/* utsname.nodename equivalent */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
	char		*zone_domain;	/* srpc_domain equivalent */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
	 * zone_lock protects the following fields of a zone_t:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
	 * 	zone_ref
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
	 * 	zone_cred_ref
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
	 * 	zone_ntasks
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
	 * 	zone_flags
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	 * 	zone_zsd
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
	kmutex_t	zone_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
	 * zone_linkage is the zone's linkage into the active or
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
	 * death-row list.  The field is protected by zonehash_lock.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
	list_node_t	zone_linkage;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
	zoneid_t	zone_id;	/* ID of zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
	uint_t		zone_ref;	/* count of zone_hold()s on zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
	uint_t		zone_cred_ref;	/* count of zone_hold_cred()s on zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
	 * zone_rootvp and zone_rootpath can never be modified once set.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
	struct vnode	*zone_rootvp;	/* zone's root vnode */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
	char		*zone_rootpath;	/* Path to zone's root + '/' */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
	ushort_t	zone_flags;	/* misc flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
	zone_status_t	zone_status;	/* protected by zone_status_lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
	uint_t		zone_ntasks;	/* number of tasks executing in zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
	kmutex_t	zone_nlwps_lock; /* protects zone_nlwps, and *_nlwps */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
					/* counters in projects and tasks */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
					/* that are within the zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
	rctl_qty_t	zone_nlwps;	/* number of lwps in zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
	rctl_qty_t	zone_nlwps_ctl; /* protected by zone_rctls->rcs_lock */
2677
212d61b14a8b PSARC/2006/451 System V resource controls for Zones
ml93401
parents: 2267
diff changeset
   350
	rctl_qty_t	zone_shmmax;	/* System V shared memory usage */
212d61b14a8b PSARC/2006/451 System V resource controls for Zones
ml93401
parents: 2267
diff changeset
   351
	ipc_rqty_t	zone_ipc;	/* System V IPC id resource usage */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
	uint_t		zone_rootpathlen; /* strlen(zone_rootpath) + 1 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
	uint32_t	zone_shares;	/* FSS shares allocated to zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
	rctl_set_t	*zone_rctls;	/* zone-wide (zone.*) rctls */
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   356
	kmutex_t	zone_mem_lock;	/* protects zone_locked_mem and */
2768
3c77434a8dbb PSARC/2004/580 zone/project.max-locked-memory Resource Controls
sl108498
parents: 2712
diff changeset
   357
					/* kpd_locked_mem for all */
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   358
					/* projects in zone. */
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   359
					/* Also protects zone_max_swap */
2768
3c77434a8dbb PSARC/2004/580 zone/project.max-locked-memory Resource Controls
sl108498
parents: 2712
diff changeset
   360
					/* grab after p_lock, before rcs_lock */
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   361
	rctl_qty_t	zone_locked_mem;	/* bytes of locked memory in */
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   362
						/* zone */
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   363
	rctl_qty_t	zone_locked_mem_ctl;	/* Current locked memory */
2768
3c77434a8dbb PSARC/2004/580 zone/project.max-locked-memory Resource Controls
sl108498
parents: 2712
diff changeset
   364
						/* limit.  Protected by */
3c77434a8dbb PSARC/2004/580 zone/project.max-locked-memory Resource Controls
sl108498
parents: 2712
diff changeset
   365
						/* zone_rctls->rcs_lock */
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   366
	rctl_qty_t	zone_max_swap; /* bytes of swap reserved by zone */
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   367
	rctl_qty_t	zone_max_swap_ctl;	/* current swap limit. */
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   368
						/* Protected by */
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   369
						/* zone_rctls->rcs_lock */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
	list_t		zone_zsd;	/* list of Zone-Specific Data values */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
	kcondvar_t	zone_cv;	/* used to signal state changes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
	struct proc	*zone_zsched;	/* Dummy kernel "zsched" process */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
	pid_t		zone_proc_initpid; /* pid of "init" for this zone */
2267
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
   374
	char		*zone_initname;	/* fs path to 'init' */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
	int		zone_boot_err;  /* for zone_boot() if boot fails */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
	char		*zone_bootargs;	/* arguments passed via zone_boot() */
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   377
	uint64_t	zone_phys_mcap;	/* physical memory cap */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
	 * zone_kthreads is protected by zone_status_lock.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
	kthread_t	*zone_kthreads;	/* kernel threads in zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
	struct priv_set	*zone_privset;	/* limit set for zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
	 * zone_vfslist is protected by vfs_list_lock().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
	struct vfs	*zone_vfslist;	/* list of FS's mounted in zone */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
	uint64_t	zone_uniqid;	/* unique zone generation number */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
	struct cred	*zone_kcred;	/* kcred-like, zone-limited cred */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
	 * zone_pool is protected by pool_lock().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
	struct pool	*zone_pool;	/* pool the zone is bound to */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
	hrtime_t	zone_pool_mod;	/* last pool bind modification time */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
	/* zone_psetid is protected by cpu_lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
	psetid_t	zone_psetid;	/* pset the zone is bound to */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
	 * The following two can be read without holding any locks.  They are
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
	 * updated under cpu_lock.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
	int		zone_ncpus;  /* zone's idea of ncpus */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
	int		zone_ncpus_online; /* zone's idea of ncpus_online */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   402
	/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   403
	 * List of ZFS datasets exported to this zone.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   404
	 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   405
	list_t		zone_datasets;	/* list of datasets */
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   406
2110
31cba59b38be 6403267 address remaining issues raised during TX code reviews
rica
parents: 1769
diff changeset
   407
	ts_label_t	*zone_slabel;	/* zone sensitivity label */
31cba59b38be 6403267 address remaining issues raised during TX code reviews
rica
parents: 1769
diff changeset
   408
	int		zone_match;	/* require label match for packets */
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   409
	tsol_mlp_list_t zone_mlps;	/* MLPs on zone-private addresses */
2267
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
   410
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   411
	boolean_t	zone_restart_init;	/* Restart init if it dies? */
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2677
diff changeset
   412
	struct brand	*zone_brand;		/* zone's brand */
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   413
	id_t		zone_defaultcid;	/* dflt scheduling class id */
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   414
	kstat_t		*zone_swapresv_kstat;
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   415
	kstat_t		*zone_lockedmem_kstat;
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   416
	/*
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   417
	 * zone_dl_list is protected by zone_lock
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   418
	 */
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   419
	struct dlnamelist *zone_dl_list;
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   420
	netstack_t	*zone_netstack;
3792
57ba782523b7 PSARC/2004/402 CPU Caps
akolb
parents: 3448
diff changeset
   421
	struct cpucap	*zone_cpucap;	/* CPU caps data */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
} zone_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
 * Special value of zone_psetid to indicate that pools are disabled.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
#define	ZONE_PS_INVAL	PS_MYID
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   429
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
extern zone_t zone0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
extern zone_t *global_zone;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
extern uint_t maxzones;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
extern rctl_hndl_t rc_zone_nlwps;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   435
extern long zone(int, void *, void *, void *, void *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
extern void zone_zsd_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
extern void zone_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
extern void zone_hold(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
extern void zone_rele(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
extern void zone_cred_hold(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
extern void zone_cred_rele(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
extern void zone_task_hold(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
extern void zone_task_rele(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
extern zone_t *zone_find_by_id(zoneid_t);
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 1166
diff changeset
   445
extern zone_t *zone_find_by_label(const ts_label_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
extern zone_t *zone_find_by_name(char *);
1769
338500d67d4f 6404654 zoneadm mount command fails on labeled systems
carlsonj
parents: 1676
diff changeset
   447
extern zone_t *zone_find_by_any_path(const char *, boolean_t);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
extern zone_t *zone_find_by_path(const char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
extern zoneid_t getzoneid(void);
3448
aaf16568054b PSARC 2006/366 IP Instances
dh155122
parents: 3247
diff changeset
   450
extern zone_t *zone_find_by_id_nolock(zoneid_t);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
 * Zone-specific data (ZSD) APIs
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
 * The following is what code should be initializing its zone_key_t to if it
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
 * calls zone_getspecific() without necessarily knowing that zone_key_create()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
 * has been called on the key.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
#define	ZONE_KEY_UNINITIALIZED	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
typedef uint_t zone_key_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
extern void	zone_key_create(zone_key_t *, void *(*)(zoneid_t),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
    void (*)(zoneid_t, void *), void (*)(zoneid_t, void *));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
extern int 	zone_key_delete(zone_key_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
extern void	*zone_getspecific(zone_key_t, zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
extern int	zone_setspecific(zone_key_t, zone_t *, const void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
 * The definition of a zsd_entry is truly private to zone.c and is only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
 * placed here so it can be shared with mdb.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
struct zsd_entry {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
	zone_key_t		zsd_key;	/* Key used to lookup value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
	void			*zsd_data;	/* Caller-managed value */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
	 * Callbacks to be executed when a zone is created, shutdown, and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
	 * destroyed, respectively.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
	void			*(*zsd_create)(zoneid_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
	void			(*zsd_shutdown)(zoneid_t, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
	void			(*zsd_destroy)(zoneid_t, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
	list_node_t		zsd_linkage;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   488
 * Macros to help with zone visibility restrictions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   489
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   490
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   491
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   492
 * Is process in the global zone?
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   493
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   494
#define	INGLOBALZONE(p) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
	((p)->p_zone == global_zone)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   497
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
 * Can process view objects in given zone?
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
#define	HASZONEACCESS(p, zoneid) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
	((p)->p_zone->zone_id == (zoneid) || INGLOBALZONE(p))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
 * Convenience macro to see if a resolved path is visible from within a
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
 * given zone.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   507
 * The basic idea is that the first (zone_rootpathlen - 1) bytes of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
 * two strings must be equal.  Since the rootpathlen has a trailing '/',
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   509
 * we want to skip everything in the path up to (but not including) the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   510
 * trailing '/'.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   511
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   512
#define	ZONE_PATH_VISIBLE(path, zone) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   513
	(strncmp((path), (zone)->zone_rootpath,		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   514
	    (zone)->zone_rootpathlen - 1) == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   515
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   516
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   517
 * Convenience macro to go from the global view of a path to that seen
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   518
 * from within said zone.  It is the responsibility of the caller to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   519
 * ensure that the path is a resolved one (ie, no '..'s or '.'s), and is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   520
 * in fact visible from within the zone.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   521
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   522
#define	ZONE_PATH_TRANSLATE(path, zone)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   523
	(ASSERT(ZONE_PATH_VISIBLE(path, zone)),	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   524
	(path) + (zone)->zone_rootpathlen - 2)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   525
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   526
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   527
 * Special processes visible in all zones.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   528
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   529
#define	ZONE_SPECIALPID(x)	 ((x) == 0 || (x) == 1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   530
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   531
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   532
 * Zone-safe version of thread_create() to be used when the caller wants to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   533
 * create a kernel thread to run within the current zone's context.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   534
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   535
extern kthread_t *zthread_create(caddr_t, size_t, void (*)(), void *, size_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   536
    pri_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   537
extern void zthread_exit(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   538
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   539
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   540
 * Functions for an external observer to register interest in a zone's status
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   541
 * change.  Observers will be woken up when the zone status equals the status
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
 * argument passed in (in the case of zone_status_timedwait, the function may
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
 * also return because of a timeout; zone_status_wait_sig may return early due
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   544
 * to a signal being delivered; zone_status_timedwait_sig may return for any of
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   545
 * the above reasons).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   546
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   547
 * Otherwise these behave identically to cv_timedwait(), cv_wait(), and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   548
 * cv_wait_sig() respectively.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   549
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   550
extern clock_t zone_status_timedwait(zone_t *, clock_t, zone_status_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   551
extern clock_t zone_status_timedwait_sig(zone_t *, clock_t, zone_status_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   552
extern void zone_status_wait(zone_t *, zone_status_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   553
extern int zone_status_wait_sig(zone_t *, zone_status_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   554
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   555
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   556
 * Get the status  of the zone (at the time it was called).  The state may
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   557
 * have progressed by the time it is returned.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   558
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   559
extern zone_status_t zone_status_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   560
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   561
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   562
 * Get the "kcred" credentials corresponding to the given zone.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   563
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   564
extern struct cred *zone_get_kcred(zoneid_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   565
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   566
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   567
 * Get/set the pool the zone is currently bound to.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   568
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   569
extern struct pool *zone_pool_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   570
extern void zone_pool_set(zone_t *, struct pool *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   571
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   573
 * Get/set the pset the zone is currently using.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   574
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   575
extern psetid_t zone_pset_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   576
extern void zone_pset_set(zone_t *, psetid_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   577
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
 * Get the number of cpus/online-cpus visible from the given zone.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   580
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   581
extern int zone_ncpus_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   582
extern int zone_ncpus_online_get(zone_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   583
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   584
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   585
 * Returns true if the named pool/dataset is visible in the current zone.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   586
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   587
extern int zone_dataset_visible(const char *, int *);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   588
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents: 766
diff changeset
   589
/*
2267
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
   590
 * zone version of kadmin()
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   591
 */
2267
c5d9a656170f PSARC/2006/269 Zone Boot Arguments II
dp
parents: 2110
diff changeset
   592
extern int zone_kadmin(int, int, const char *, cred_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   593
extern void zone_shutdown_global(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   594
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   595
extern void mount_in_progress(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   596
extern void mount_completed(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   597
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
extern int zone_walk(int (*)(zone_t *, void *), void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
2768
3c77434a8dbb PSARC/2004/580 zone/project.max-locked-memory Resource Controls
sl108498
parents: 2712
diff changeset
   600
extern rctl_hndl_t rc_zone_locked_mem;
3247
e05001c14ea2 PSARC 2006/496 Improved Zones/RM Integration
gjelinek
parents: 2768
diff changeset
   601
extern rctl_hndl_t rc_zone_max_swap;
2768
3c77434a8dbb PSARC/2004/580 zone/project.max-locked-memory Resource Controls
sl108498
parents: 2712
diff changeset
   602
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   603
#endif	/* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   604
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   605
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   606
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   607
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   608
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   609
#endif	/* _SYS_ZONE_H */