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_ */