1f0a75d27SPawel Jakub Dawidek /*
2f0a75d27SPawel Jakub Dawidek  * CDDL HEADER START
3f0a75d27SPawel Jakub Dawidek  *
4f0a75d27SPawel Jakub Dawidek  * The contents of this file are subject to the terms of the
5f0a75d27SPawel Jakub Dawidek  * Common Development and Distribution License, Version 1.0 only
6f0a75d27SPawel Jakub Dawidek  * (the "License").  You may not use this file except in compliance
7f0a75d27SPawel Jakub Dawidek  * with the License.
8f0a75d27SPawel Jakub Dawidek  *
9f0a75d27SPawel Jakub Dawidek  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10f0a75d27SPawel Jakub Dawidek  * or http://www.opensolaris.org/os/licensing.
11f0a75d27SPawel Jakub Dawidek  * See the License for the specific language governing permissions
12f0a75d27SPawel Jakub Dawidek  * and limitations under the License.
13f0a75d27SPawel Jakub Dawidek  *
14f0a75d27SPawel Jakub Dawidek  * When distributing Covered Code, include this CDDL HEADER in each
15f0a75d27SPawel Jakub Dawidek  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16f0a75d27SPawel Jakub Dawidek  * If applicable, add the following below this CDDL HEADER, with the
17f0a75d27SPawel Jakub Dawidek  * fields enclosed by brackets "[]" replaced with your own identifying
18f0a75d27SPawel Jakub Dawidek  * information: Portions Copyright [yyyy] [name of copyright owner]
19f0a75d27SPawel Jakub Dawidek  *
20f0a75d27SPawel Jakub Dawidek  * CDDL HEADER END
21f0a75d27SPawel Jakub Dawidek  */
22f0a75d27SPawel Jakub Dawidek /*
23f0a75d27SPawel Jakub Dawidek  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24f0a75d27SPawel Jakub Dawidek  * Use is subject to license terms.
25f0a75d27SPawel Jakub Dawidek  */
26f0a75d27SPawel Jakub Dawidek 
27f0a75d27SPawel Jakub Dawidek /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28f0a75d27SPawel Jakub Dawidek /*	  All Rights Reserved  	*/
29f0a75d27SPawel Jakub Dawidek 
30f0a75d27SPawel Jakub Dawidek 
31f0a75d27SPawel Jakub Dawidek #ifndef _SYS_PROCSET_H
32f0a75d27SPawel Jakub Dawidek #define	_SYS_PROCSET_H
33f0a75d27SPawel Jakub Dawidek 
34f0a75d27SPawel Jakub Dawidek #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.6 */
35f0a75d27SPawel Jakub Dawidek 
36f0a75d27SPawel Jakub Dawidek #ifdef	__cplusplus
37f0a75d27SPawel Jakub Dawidek extern "C" {
38f0a75d27SPawel Jakub Dawidek #endif
39f0a75d27SPawel Jakub Dawidek 
40f0a75d27SPawel Jakub Dawidek #include <sys/feature_tests.h>
41f0a75d27SPawel Jakub Dawidek #include <sys/types.h>
42f0a75d27SPawel Jakub Dawidek #include <sys/signal.h>
43f0a75d27SPawel Jakub Dawidek 
44f0a75d27SPawel Jakub Dawidek /*
45f0a75d27SPawel Jakub Dawidek  *	This file defines the data needed to specify a set of
46f0a75d27SPawel Jakub Dawidek  *	processes.  These types are used by the sigsend, sigsendset,
47f0a75d27SPawel Jakub Dawidek  *	priocntl, priocntlset, waitid, evexit, and evexitset system
48f0a75d27SPawel Jakub Dawidek  *	calls.
49f0a75d27SPawel Jakub Dawidek  */
50f0a75d27SPawel Jakub Dawidek #define	P_INITPID	1
51f0a75d27SPawel Jakub Dawidek #define	P_INITUID	0
52f0a75d27SPawel Jakub Dawidek #define	P_INITPGID	0
53f0a75d27SPawel Jakub Dawidek 
54f13b5a0fSKonstantin Belousov #ifndef _IDTYPE_T_DECLARED
55f0a75d27SPawel Jakub Dawidek 
56f0a75d27SPawel Jakub Dawidek /*
57f0a75d27SPawel Jakub Dawidek  *	The following defines the values for an identifier type.  It
58f0a75d27SPawel Jakub Dawidek  *	specifies the interpretation of an id value.  An idtype and
59f0a75d27SPawel Jakub Dawidek  *	id together define a simple set of processes.
60f0a75d27SPawel Jakub Dawidek  */
61f0a75d27SPawel Jakub Dawidek typedef enum
62f0a75d27SPawel Jakub Dawidek #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
63f0a75d27SPawel Jakub Dawidek 	idtype		/* pollutes XPG4.2 namespace */
64f0a75d27SPawel Jakub Dawidek #endif
65f0a75d27SPawel Jakub Dawidek 		{
66f0a75d27SPawel Jakub Dawidek 	P_PID,		/* A process identifier.		*/
67f0a75d27SPawel Jakub Dawidek 	P_PPID,		/* A parent process identifier.		*/
68f0a75d27SPawel Jakub Dawidek 	P_PGID,		/* A process group (job control group)	*/
69f0a75d27SPawel Jakub Dawidek 			/* identifier.				*/
70f0a75d27SPawel Jakub Dawidek 	P_SID,		/* A session identifier.		*/
71f0a75d27SPawel Jakub Dawidek 	P_CID,		/* A scheduling class identifier.	*/
72f0a75d27SPawel Jakub Dawidek 	P_UID,		/* A user identifier.			*/
73f0a75d27SPawel Jakub Dawidek 	P_GID,		/* A group identifier.			*/
74f0a75d27SPawel Jakub Dawidek 	P_ALL,		/* All processes.			*/
75f0a75d27SPawel Jakub Dawidek 	P_LWPID,	/* An LWP identifier.			*/
76f0a75d27SPawel Jakub Dawidek 	P_TASKID,	/* A task identifier.			*/
77f0a75d27SPawel Jakub Dawidek 	P_PROJID,	/* A project identifier.		*/
78f0a75d27SPawel Jakub Dawidek 	P_POOLID,	/* A pool identifier.			*/
79f0a75d27SPawel Jakub Dawidek 	P_ZONEID,	/* A zone identifier.			*/
80f0a75d27SPawel Jakub Dawidek 	P_CTID,		/* A (process) contract identifier.	*/
81f0a75d27SPawel Jakub Dawidek 	P_CPUID,	/* CPU identifier.			*/
82f0a75d27SPawel Jakub Dawidek 	P_PSETID	/* Processor set identifier		*/
83f0a75d27SPawel Jakub Dawidek } idtype_t;
84f0a75d27SPawel Jakub Dawidek 
85f13b5a0fSKonstantin Belousov #define	_IDTYPE_T_DECLARED
86f13b5a0fSKonstantin Belousov 
87f13b5a0fSKonstantin Belousov #endif
88f0a75d27SPawel Jakub Dawidek 
89f0a75d27SPawel Jakub Dawidek /*
90f0a75d27SPawel Jakub Dawidek  *	The following defines the operations which can be performed to
91f0a75d27SPawel Jakub Dawidek  *	combine two simple sets of processes to form another set of
92f0a75d27SPawel Jakub Dawidek  *	processes.
93f0a75d27SPawel Jakub Dawidek  */
94f0a75d27SPawel Jakub Dawidek #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
95f0a75d27SPawel Jakub Dawidek typedef enum idop {
96f0a75d27SPawel Jakub Dawidek 	POP_DIFF,	/* Set difference.  The processes which	*/
97f0a75d27SPawel Jakub Dawidek 			/* are in the left operand set and not	*/
98f0a75d27SPawel Jakub Dawidek 			/* in the right operand set.		*/
99f0a75d27SPawel Jakub Dawidek 	POP_AND,	/* Set disjunction.  The processes	*/
100f0a75d27SPawel Jakub Dawidek 			/* which are in both the left and right	*/
101f0a75d27SPawel Jakub Dawidek 			/* operand sets.			*/
102f0a75d27SPawel Jakub Dawidek 	POP_OR,		/* Set conjunction.  The processes	*/
103f0a75d27SPawel Jakub Dawidek 			/* which are in either the left or the	*/
104f0a75d27SPawel Jakub Dawidek 			/* right operand sets (or both).	*/
105f0a75d27SPawel Jakub Dawidek 	POP_XOR		/* Set exclusive or.  The processes 	*/
106f0a75d27SPawel Jakub Dawidek 			/* which are in either the left or	*/
107f0a75d27SPawel Jakub Dawidek 			/* right operand sets but not in both.	*/
108f0a75d27SPawel Jakub Dawidek } idop_t;
109f0a75d27SPawel Jakub Dawidek 
110f0a75d27SPawel Jakub Dawidek 
111f0a75d27SPawel Jakub Dawidek /*
112f0a75d27SPawel Jakub Dawidek  *	The following structure is used to define a set of processes.
113f0a75d27SPawel Jakub Dawidek  *	The set is defined in terms of two simple sets of processes
114f0a75d27SPawel Jakub Dawidek  *	and an operator which operates on these two operand sets.
115f0a75d27SPawel Jakub Dawidek  */
116f0a75d27SPawel Jakub Dawidek typedef struct procset {
117f0a75d27SPawel Jakub Dawidek 	idop_t		p_op;	/* The operator connection the	*/
118f0a75d27SPawel Jakub Dawidek 				/* following two operands each	*/
119f0a75d27SPawel Jakub Dawidek 				/* of which is a simple set of	*/
120f0a75d27SPawel Jakub Dawidek 				/* processes.			*/
121f0a75d27SPawel Jakub Dawidek 
122f0a75d27SPawel Jakub Dawidek 	idtype_t	p_lidtype;
123f0a75d27SPawel Jakub Dawidek 				/* The type of the left operand	*/
124f0a75d27SPawel Jakub Dawidek 				/* simple set.			*/
125f0a75d27SPawel Jakub Dawidek 	id_t		p_lid;	/* The id of the left operand.	*/
126f0a75d27SPawel Jakub Dawidek 
127f0a75d27SPawel Jakub Dawidek 	idtype_t	p_ridtype;
128f0a75d27SPawel Jakub Dawidek 				/* The type of the right	*/
129f0a75d27SPawel Jakub Dawidek 				/* operand simple set.		*/
130f0a75d27SPawel Jakub Dawidek 	id_t		p_rid;	/* The id of the right operand.	*/
131f0a75d27SPawel Jakub Dawidek } procset_t;
132f0a75d27SPawel Jakub Dawidek 
133f0a75d27SPawel Jakub Dawidek /*
134f0a75d27SPawel Jakub Dawidek  *	The following macro can be used to initialize a procset_t
135f0a75d27SPawel Jakub Dawidek  *	structure.
136f0a75d27SPawel Jakub Dawidek  */
137f0a75d27SPawel Jakub Dawidek #define	setprocset(psp, op, ltype, lid, rtype, rid) \
138f0a75d27SPawel Jakub Dawidek 			(psp)->p_op		= (op); \
139f0a75d27SPawel Jakub Dawidek 			(psp)->p_lidtype	= (ltype); \
140f0a75d27SPawel Jakub Dawidek 			(psp)->p_lid		= (lid); \
141f0a75d27SPawel Jakub Dawidek 			(psp)->p_ridtype	= (rtype); \
142f0a75d27SPawel Jakub Dawidek 			(psp)->p_rid		= (rid);
143f0a75d27SPawel Jakub Dawidek 
144f0a75d27SPawel Jakub Dawidek #endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
145f0a75d27SPawel Jakub Dawidek 
146bc96366cSSteven Hartland #ifdef illumos
147f0a75d27SPawel Jakub Dawidek #ifdef _KERNEL
148f0a75d27SPawel Jakub Dawidek 
149f0a75d27SPawel Jakub Dawidek struct proc;
150f0a75d27SPawel Jakub Dawidek 
151f0a75d27SPawel Jakub Dawidek extern int dotoprocs(procset_t *, int (*)(), char *);
152f0a75d27SPawel Jakub Dawidek extern int dotolwp(procset_t *, int (*)(), char *);
153f0a75d27SPawel Jakub Dawidek extern int procinset(struct proc *, procset_t *);
154f0a75d27SPawel Jakub Dawidek extern int sigsendproc(struct proc *, sigsend_t *);
155f0a75d27SPawel Jakub Dawidek extern int sigsendset(procset_t *, sigsend_t *);
156f0a75d27SPawel Jakub Dawidek extern boolean_t cur_inset_only(procset_t *);
157f0a75d27SPawel Jakub Dawidek extern id_t getmyid(idtype_t);
158f0a75d27SPawel Jakub Dawidek 
159f0a75d27SPawel Jakub Dawidek #endif	/* _KERNEL */
160b468fe2bSJohn Birrell #endif
161f0a75d27SPawel Jakub Dawidek 
162f0a75d27SPawel Jakub Dawidek #ifdef	__cplusplus
163f0a75d27SPawel Jakub Dawidek }
164f0a75d27SPawel Jakub Dawidek #endif
165f0a75d27SPawel Jakub Dawidek 
166f0a75d27SPawel Jakub Dawidek #endif	/* _SYS_PROCSET_H */
167