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 26#ifndef _NDR_TYPES_NDL_ 27#define _NDR_TYPES_NDL_ 28 29#define TYPEINFO(TYPE) ndt__##TYPE 30 31#ifdef NDRGEN 32 33#define ALIGN(X) [align(X)] 34#define OPERATION(X) [operation(X)] 35#define IN [in] 36#define OUT [out] 37#define INOUT [in out] 38 39#define STRING [string] 40#define SIZE_IS(X) [size_is(X)] 41 42#define SWITCH(X) [switch_is(X)] 43#define CASE(X) [case(X)] 44#define DEFAULT [default] 45 46#define INTERFACE(X) [interface(X)] 47#define UUID(X) [uuid(X)] 48 49#define ARG_IS(X) [arg_is(X)] 50 51#define REFERENCE [reference] 52#define REF [reference] 53#define UNIQUE [unique] 54#define PTR [ptr] 55#define POINTER_DEFAULT(X) [pointer_default(X)] 56 57#define ANY_SIZE_ARRAY * 58 59#define IMPORT_EXTERN [extern] 60 61#define BYTE uchar 62#define WORD ushort 63#define DWORD ulong 64#define ntstatus_t ulong 65 66#define LPTSTR STRING wchar * 67 68#define LPBYTE uchar * 69#define LPWORD ushort * 70#define LPDWORD ulong * 71 72/* 73 * Opaque context handle. 74 */ 75#ifndef CONTEXT_HANDLE 76#define CONTEXT_HANDLE(NAME) \ 77 struct NAME { \ 78 DWORD data1; \ 79 DWORD data2; \ 80 WORD data3[2]; \ 81 BYTE data4[8]; \ 82 }; \ 83 typedef struct NAME 84#endif /* CONTEXT_HANDLE */ 85 86#define EXTERNTYPEINFO(TYPE) 87 88#else /* NDRGEN */ 89 90#define ALIGN(X) 91#define OPERATION(X) 92#define IN 93#define OUT 94#define INOUT 95 96#define STRING 97#define SIZE_IS(X) 98 99#define SWITCH(X) 100#define CASE(X) 101#define DEFAULT 102 103#define INTERFACE(X) 104#define UUID(X) 105 106#define ARG_IS(X) 107 108#define REFERENCE 109#define REF 110#define UNIQUE 111#define PTR 112#define POINTER_DEFAULT(X) 113 114#define IMPORT_EXTERN 115 116/* 117 * When not using ndrgen, get BYTE, WORD, DWORD definitions from wintypes.h. 118 */ 119#include <smbsrv/wintypes.h> 120 121#define EXTERNTYPEINFO(TYPE) extern struct ndr_typeinfo TYPEINFO(TYPE); 122 123 124/* 125 *********************************************************************** 126 * There is a bug in the way that midl and the marshalling code handles 127 * unions so we need to fix some of the data offsets at runtime. The 128 * following macros and the fixup function handle the correction. 129 *********************************************************************** 130 */ 131 132/* 133 * DECL_FIXUP_STRUCT allows us to declare external references to data 134 * structures generated by ndrgen in the _ndr.c file. 135 */ 136#define DECL_FIXUP_STRUCT(NAME) extern struct ndr_typeinfo ndt__##NAME 137 138/* 139 * CASE_INFO_ENT is intended to simplify the declaration of the case 140 * statement in the fixup function. Assuming you have followed the 141 * convention for naming the individual structures all you have to do 142 * is add a single line to the fixup function for each new case. 143 */ 144#define CASE_INFO_ENT(NAME,N) \ 145 case N: size1 = sizeof (struct NAME##N); \ 146 break 147 148/* 149 * FIXUP_PDU_SIZE is used to patch the appropriate structures (identified 150 * by DECL_FIXUP_STRUCT) at runtime. The values are based on the 151 * switch_index. 152 */ 153#define FIXUP_PDU_SIZE(NAME,SIZE) { \ 154 ndt__##NAME.pdu_size_fixed_part = SIZE; \ 155 ndt__##NAME.c_size_fixed_part = SIZE; \ 156} 157 158 159#endif /* NDRGEN */ 160 161/* 162 * UNION_INFO_ENT is intended to simplify adding new entries to a union. 163 * If the entry structures are named using the form FunctionNameX, 164 * where X is the sitch_value, you can just add a single line. Note 165 * that you must also update the fixup function in mlsvc_xxx.c. 166 */ 167#define UNION_INFO_ENT(N,NAME) CASE(N) struct NAME##N info##N 168#define UNION_INFO_PTR(N,NAME) CASE(N) struct NAME##N *info##N 169 170#endif /* _NDR_TYPES_NDL_ */ 171