xref: /illumos-gate/usr/src/lib/libmlrpc/common/ndrtypes.ndl (revision 300fdee27f8b59b381c1a0316bdee52fdfdb9213)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 *
25 * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
26 */
27
28#ifndef _NDRTYPES_NDL_
29#define _NDRTYPES_NDL_
30
31/*
32 * Type definitions (and related) used in NDL files and the
33 * NDL run-time support libraries.  See also: libmlrpc.h
34 */
35
36#define TYPEINFO(TYPE)  ndt__##TYPE
37
38#ifdef NDRGEN
39
40#define ALIGN(X)	[align(X)]
41#define OPERATION(X)	[operation(X)]
42#define IN		[in]
43#define OUT		[out]
44#define INOUT		[in out]
45
46#define STRING		[string]
47#define SIZE_IS(X)	[size_is(X)]
48
49#define SWITCH(X)	[switch_is(X)]
50#define CASE(X)		[case(X)]
51#define DEFAULT		[default]
52
53#define INTERFACE(X)	[interface(X)]
54#define UUID(X)		[uuid(X)]
55
56#define ARG_IS(X)	[arg_is(X)]
57
58#define REFERENCE	[reference]
59#define REF		[reference]
60#define UNIQUE		[unique]
61#define PTR		[ptr]
62#define POINTER_DEFAULT(X)	[pointer_default(X)]
63
64#define ANY_SIZE_ARRAY	*
65
66#define IMPORT_EXTERN	[extern]
67
68#define BYTE	uchar
69#define WORD	ushort
70#define DWORD	ulong
71#define ntstatus_t	ulong
72
73#define LPTSTR	STRING wchar *
74
75#define LPBYTE  uchar *
76#define LPWORD  ushort *
77#define LPDWORD ulong *
78
79#define EXTERNTYPEINFO(TYPE)
80
81#else /* NDRGEN */
82
83#define ALIGN(X)
84#define OPERATION(X)
85#define IN
86#define OUT
87#define INOUT
88
89#define STRING
90#define SIZE_IS(X)
91
92#define SWITCH(X)
93#define CASE(X)
94#define DEFAULT
95
96#define INTERFACE(X)
97#define UUID(X)
98
99#define ARG_IS(X)
100
101#define REFERENCE
102#define REF
103#define UNIQUE
104#define PTR
105#define POINTER_DEFAULT(X)
106
107#define IMPORT_EXTERN
108
109/*
110 * When not using ndrgen, get BYTE, WORD, DWORD definitions from wintypes.h.
111 */
112#include <smb/wintypes.h>
113
114#define EXTERNTYPEINFO(TYPE)	extern struct ndr_typeinfo TYPEINFO(TYPE);
115
116
117/*
118 ***********************************************************************
119 * There is a bug in the way that midl and the marshalling code handles
120 * unions so we need to fix some of the data offsets at runtime. The
121 * following macros and the fixup function handle the correction.
122 ***********************************************************************
123 */
124
125/*
126 * DECL_FIXUP_STRUCT allows us to declare external references to data
127 * structures generated by ndrgen in the _ndr.c file.
128 */
129#define DECL_FIXUP_STRUCT(NAME)	extern struct ndr_typeinfo ndt__##NAME
130
131/*
132 * CASE_INFO_ENT is intended to simplify the declaration of the case
133 * statement in the fixup function. Assuming you have followed the
134 * convention for naming the individual structures all you have to do
135 * is add a single line to the fixup function for each new case.
136 */
137#define CASE_INFO_ENT(NAME,N) \
138			case N: size1 = sizeof (struct NAME##N); \
139			break
140
141/*
142 * FIXUP_PDU_SIZE is used to patch the appropriate structures (identified
143 * by DECL_FIXUP_STRUCT) at runtime. The values are based on the
144 * switch_index.
145 */
146#define FIXUP_PDU_SIZE(NAME,SIZE) { \
147	ndt__##NAME.pdu_size_fixed_part = SIZE; \
148	ndt__##NAME.c_size_fixed_part = SIZE; \
149}
150
151
152#endif /* NDRGEN */
153
154/*
155 * UNION_INFO_ENT is intended to simplify adding new entries to a union.
156 * If the entry structures are named using the form FunctionNameX,
157 * where X is the sitch_value, you can just add a single line. Note
158 * that you must also update the fixup function in mlsvc_xxx.c.
159 */
160#define UNION_INFO_ENT(N,NAME) CASE(N) struct NAME##N info##N
161#define UNION_INFO_PTR(N,NAME) CASE(N) struct NAME##N *info##N
162
163/*
164 * Opaque context handle.
165 */
166#ifndef CONTEXT_HANDLE
167#define CONTEXT_HANDLE(NAME)	\
168	struct NAME {		\
169		DWORD data1;    \
170		DWORD data2;    \
171		WORD  data3[2]; \
172		BYTE  data4[8];	\
173	};			\
174	typedef struct NAME
175#endif /* CONTEXT_HANDLE */
176
177#endif /* _NDRTYPES_NDL_ */
178