xref: /titanic_54/usr/src/uts/common/sys/klpd.h (revision ddf7fe95b8ad67aa16deb427a0b78f4dd4ff22b1)
1*ddf7fe95Scasper /*
2*ddf7fe95Scasper  * CDDL HEADER START
3*ddf7fe95Scasper  *
4*ddf7fe95Scasper  * The contents of this file are subject to the terms of the
5*ddf7fe95Scasper  * Common Development and Distribution License (the "License").
6*ddf7fe95Scasper  * You may not use this file except in compliance with the License.
7*ddf7fe95Scasper  *
8*ddf7fe95Scasper  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*ddf7fe95Scasper  * or http://www.opensolaris.org/os/licensing.
10*ddf7fe95Scasper  * See the License for the specific language governing permissions
11*ddf7fe95Scasper  * and limitations under the License.
12*ddf7fe95Scasper  *
13*ddf7fe95Scasper  * When distributing Covered Code, include this CDDL HEADER in each
14*ddf7fe95Scasper  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*ddf7fe95Scasper  * If applicable, add the following below this CDDL HEADER, with the
16*ddf7fe95Scasper  * fields enclosed by brackets "[]" replaced with your own identifying
17*ddf7fe95Scasper  * information: Portions Copyright [yyyy] [name of copyright owner]
18*ddf7fe95Scasper  *
19*ddf7fe95Scasper  * CDDL HEADER END
20*ddf7fe95Scasper  */
21*ddf7fe95Scasper /*
22*ddf7fe95Scasper  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23*ddf7fe95Scasper  * Use is subject to license terms.
24*ddf7fe95Scasper  */
25*ddf7fe95Scasper 
26*ddf7fe95Scasper #ifndef	_SYS_KLPD_H
27*ddf7fe95Scasper #define	_SYS_KLPD_H
28*ddf7fe95Scasper 
29*ddf7fe95Scasper #pragma ident	"%Z%%M%	%I%	%E% SMI"
30*ddf7fe95Scasper 
31*ddf7fe95Scasper #include <sys/types.h>
32*ddf7fe95Scasper #include <sys/priv.h>
33*ddf7fe95Scasper #include <sys/procset.h>
34*ddf7fe95Scasper 
35*ddf7fe95Scasper #ifdef _KERNEL
36*ddf7fe95Scasper #include <sys/cred.h>
37*ddf7fe95Scasper #include <sys/sysmacros.h>
38*ddf7fe95Scasper #include <sys/varargs.h>
39*ddf7fe95Scasper #endif
40*ddf7fe95Scasper 
41*ddf7fe95Scasper #ifdef	__cplusplus
42*ddf7fe95Scasper extern "C" {
43*ddf7fe95Scasper #endif
44*ddf7fe95Scasper 
45*ddf7fe95Scasper #define	KLPDCALL_VERS		1
46*ddf7fe95Scasper 
47*ddf7fe95Scasper #define	KLPDARG_NOMORE		0		/* End of argument List */
48*ddf7fe95Scasper #define	KLPDARG_NONE		0		/* No argument */
49*ddf7fe95Scasper #define	KLPDARG_VNODE		1		/* vnode_t * */
50*ddf7fe95Scasper #define	KLPDARG_INT		2		/* int */
51*ddf7fe95Scasper #define	KLPDARG_PORT		3		/* int, port number */
52*ddf7fe95Scasper #define	KLPDARG_TCPPORT		4		/* int, tcp port number */
53*ddf7fe95Scasper #define	KLPDARG_UDPPORT		5		/* int, udp port number */
54*ddf7fe95Scasper #define	KLPDARG_SCTPPORT	6		/* int, sctp port number */
55*ddf7fe95Scasper #define	KLPDARG_SDPPORT		7		/* int, sdp port number */
56*ddf7fe95Scasper 
57*ddf7fe95Scasper #ifdef _KERNEL
58*ddf7fe95Scasper 
59*ddf7fe95Scasper struct klpd_reg;
60*ddf7fe95Scasper struct credklpd;
61*ddf7fe95Scasper 
62*ddf7fe95Scasper int klpd_reg(int, idtype_t, id_t, priv_set_t *);
63*ddf7fe95Scasper int klpd_unreg(int, idtype_t, id_t);
64*ddf7fe95Scasper void klpd_remove(struct klpd_reg **);
65*ddf7fe95Scasper void klpd_rele(struct klpd_reg *);
66*ddf7fe95Scasper int klpd_call(const cred_t *, const priv_set_t *, va_list);
67*ddf7fe95Scasper void crklpd_hold(struct credklpd *);
68*ddf7fe95Scasper void crklpd_rele(struct credklpd *);
69*ddf7fe95Scasper 
70*ddf7fe95Scasper #endif /* _KERNEL */
71*ddf7fe95Scasper 
72*ddf7fe95Scasper typedef struct klpd_head {
73*ddf7fe95Scasper 	uint32_t	klh_vers;		/* Version */
74*ddf7fe95Scasper 	uint32_t	klh_len;		/* Length of full packet */
75*ddf7fe95Scasper 	uint32_t	klh_argoff;		/* Offset of argument */
76*ddf7fe95Scasper 	uint32_t	klh_privoff;		/* Offset of privilege set */
77*ddf7fe95Scasper } klpd_head_t;
78*ddf7fe95Scasper 
79*ddf7fe95Scasper #define	KLH_PRIVSET(kh)	((priv_set_t *)(((kh)->klh_privoff == 0 ? NULL : \
80*ddf7fe95Scasper 			(char *)(kh) + (kh)->klh_privoff)))
81*ddf7fe95Scasper #define	KLH_ARG(kh)	((void *)((kh)->klh_argoff != 0 ? \
82*ddf7fe95Scasper 			(char *)(kh) + (kh)->klh_argoff : NULL))
83*ddf7fe95Scasper 
84*ddf7fe95Scasper typedef struct klpd_arg {
85*ddf7fe95Scasper 	uint_t	kla_type;
86*ddf7fe95Scasper 	uint_t	kla_dlen;
87*ddf7fe95Scasper 	union {
88*ddf7fe95Scasper 		char	__cdata[1];
89*ddf7fe95Scasper 		int	__idata;
90*ddf7fe95Scasper 		uint_t	__uidata;
91*ddf7fe95Scasper 	} kla_data;
92*ddf7fe95Scasper } klpd_arg_t;
93*ddf7fe95Scasper 
94*ddf7fe95Scasper #define	kla_str		kla_data.__cdata
95*ddf7fe95Scasper #define	kla_int		kla_data.__idata
96*ddf7fe95Scasper #define	kla_uint	kla_data.__uidata
97*ddf7fe95Scasper 
98*ddf7fe95Scasper #ifdef	__cplusplus
99*ddf7fe95Scasper }
100*ddf7fe95Scasper #endif
101*ddf7fe95Scasper 
102*ddf7fe95Scasper #endif	/* _SYS_KLPD_H */
103