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.
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.
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]
22 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
28 #include "ndrtypes.ndl"
31 * Normally, constructs are (un)marshalled atoms first, then
32 * constructs, then pointers. This can be confusing sometimes
33 * when debugging. We know that everything in here can be
34 * safely (un)marshalled in member order, so we say so.
37 #define _NO_REORDER_ [_no_reorder]
42 #define NDR_TRANSFER_SYNTAX_UUID "8a885d04-1ceb-11c9-9fe8-08002b104860"
45 * UUID (Universal Unique IDentifier)
47 /* (X/Open CAE Spec Appendix A) */
51 WORD time_hi_and_version;
52 BYTE clock_seq_hi_and_reserved;
63 typedef struct ndr_uuid ndr_uuid_t;
66 * Representation label -- needed for RPC header
67 * (X/Open CAE Spec Chapter 14.1)
69 * Bits Data Type Description
70 * ---- --------- -----------
73 * 4-7 byte-order 0=big-endian
81 #define NDR_REPLAB_CHAR_MASK 0x0F /* low nibble of intg_char */
82 #define NDR_REPLAB_CHAR_ASCII 0x00 /* ASCII */
83 #define NDR_REPLAB_CHAR_EBCDIC 0x01 /* EBCDIC (never happen) */
84 #define NDR_REPLAB_INTG_MASK 0xF0 /* hi nibble of intg_char */
85 #define NDR_REPLAB_INTG_BIG_ENDIAN 0x00 /* big endian */
86 #define NDR_REPLAB_INTG_LITTLE_ENDIAN 0x10 /* little endian (x86) */
87 #define NDR_REPLAB_FLOAT_IEEE 0x00
88 #define NDR_REPLAB_FLOAT_VAX 0x01
89 #define NDR_REPLAB_FLOAT_CRAY 0x02
90 #define NDR_REPLAB_FLOAT_IBM 0x03
92 struct ndr_representation_label {
93 BYTE intg_char_rep; /* integer and charset */
97 typedef struct ndr_representation_label ndr_replab_t;
102 * RPC PDU (Protocol Data Unit) types
103 ****************************************************************
104 * (X/Open CAE Spec 12.1)
107 #define NDR_PTYPE_REQUEST 0x00 /* CO/CL */
108 #define NDR_PTYPE_PING 0x01 /* CL */
109 #define NDR_PTYPE_RESPONSE 0x02 /* CO/CL */
110 #define NDR_PTYPE_FAULT 0x03 /* CL/CL */
111 #define NDR_PTYPE_WORKING 0x04 /* CL */
112 #define NDR_PTYPE_NOCALL 0x05 /* CL */
113 #define NDR_PTYPE_REJECT 0x06 /* CL */
114 #define NDR_PTYPE_ACK 0x07 /* CL */
115 #define NDR_PTYPE_CL_CANCEL 0x08 /* CL */
116 #define NDR_PTYPE_FACK 0x09 /* CL */
117 #define NDR_PTYPE_CANCEL_ACK 0x0A /* CL */
118 #define NDR_PTYPE_BIND 0x0B /* CO */
119 #define NDR_PTYPE_BIND_ACK 0x0C /* CO */
120 #define NDR_PTYPE_BIND_NAK 0x0D /* CO */
121 #define NDR_PTYPE_ALTER_CONTEXT 0x0E /* CO */
122 #define NDR_PTYPE_ALTER_CONTEXT_RESP 0x0F /* CO */
123 /* 0x10 missing from DCE/RPC */
124 #define NDR_PTYPE_SHUTDOWN 0x11 /* CO */
125 #define NDR_PTYPE_CO_CANCEL 0x12 /* CO */
126 #define NDR_PTYPE_ORPHANED 0x13 /* CO */
129 * Flags in the RPC header for Connection-oriented PDU data types
130 * (X/Open CAE Spec 12.6.3.1)
132 * MS-RPCE 2.2.2.3 PFC_SUPPORT_HEADER_SIGN
133 * For PDU types bind, bind_ack, alter_context and alter_context_resp,
134 * 0x04 means PFC_SUPPORT_HEADER_SIGN.
135 * For other PDU types 0x04 means PFC_PENDING_CANCEL.
137 #define NDR_PFC_FIRST_FRAG 0x01 /* First fragment */
138 #define NDR_PFC_LAST_FRAG 0x02 /* Last framgent */
139 #define NDR_PFC_PENDING_CANCEL 0x04 /* Cancel was pending@sender*/
140 #define NDR_PFC_SUPPORT_HEADER_SIGN NDR_PFC_PENDING_CANCEL
141 #define NDR_PFC_RESERVED_1 0x08 /* */
142 #define NDR_PFC_CONC_MPX 0x10 /* supports concurrent muxing
143 * of single connection */
144 #define NDR_PFC_DID_NOT_EXECUTE 0x20 /* for PTYPE_FAULT, guarantee
145 * call did not execute */
146 #define NDR_PFC_MAYBE 0x40 /* "maybe" semantics req'ed*/
147 #define NDR_PFC_OBJECT_UUID 0x80 /* */
153 #define NDR_C_AUTHN_NONE 0x00 /* No authentication */
154 #define NDR_C_AUTHN_GSS_NEGOTIATE 0x09 /* SPNEGO */
155 #define NDR_C_AUTHN_WINNT 0x0A /* NTLM */
156 #define NDR_C_AUTHN_GSS_KERBEROS 0x10 /* Kerberos */
157 #define NDR_C_AUTHN_GSS_NETLOGON 0x44 /* Netlogon */
158 #define NDR_C_AUTHN_GSS_DEFAULT 0xFF /* Default is NTLM */
161 * Encoding protection levels
162 * X/Open CAE Spec 13.1.2.1
165 #define NDR_C_AUTHN_LEVEL_DEFAULT 0x00 /* Same as Connect */
166 #define NDR_C_AUTHN_LEVEL_NONE 0x01
167 #define NDR_C_AUTHN_LEVEL_CONNECT 0x02
168 #define NDR_C_AUTHN_LEVEL_CALL 0x03
169 #define NDR_C_AUTHN_LEVEL_PKT 0x04
170 #define NDR_C_AUTHN_LEVEL_PKT_INTEGRITY 0x05
171 #define NDR_C_AUTHN_LEVEL_PKT_PRIVACY 0x06
174 * Header common to all Connection-oriented RPC PDUs
175 * (X/Open CAE Spec 12.6.3.1)
178 struct ndr_p_syntax_id {
182 typedef struct ndr_p_syntax_id ndr_p_syntax_id_t;
185 struct ndr_common_header {
186 BYTE rpc_vers; /* 00:01 5 */
187 BYTE rpc_vers_minor; /* 01:01 0 */
188 BYTE ptype; /* 02:01 NDR_PTYPE_... */
189 BYTE pfc_flags; /* 03:01 NDR_PFC_... */
190 struct ndr_representation_label
191 packed_drep; /* 04:04 NDR representation label */
192 WORD frag_length; /* 08:02 total length of frag */
193 WORD auth_length; /* 10:02 length of auth_value */
194 DWORD call_id; /* 12:04 call identifier */
197 typedef struct ndr_common_header ndr_common_header_t;
198 EXTERNTYPEINFO(ndr_common_header)
201 * MS-RPCE 2.2.6 Type Serialization Version 1 extensions to IDL/+ pickle
202 * One header per serialization stream: the header must be little endian.
203 * The filler must be set to 0xcccccccc during marshaling and ignored
204 * during unmarshaling.
207 struct ndr_serialtype1_hdr {
208 BYTE version; /* 00:01 1 */
209 BYTE endianness; /* 01:01 0=big, 1=little */
210 WORD hdrlen; /* 02:02 8 */
211 DWORD filler; /* 04:04 0xcccccccc */
214 typedef struct ndr_serialtype1_hdr ndr_serialtype1_hdr_t;
215 EXTERNTYPEINFO(ndr_serialtype1_hdr)
218 * Type Serialization Version 1 Private Header.
219 * A private header must precede a top-level NDR constructed type.
222 struct ndr_serialtype1_priv_hdr {
223 DWORD buflen; /* 00:04 */
224 DWORD filler; /* 04:04 must be zero */
227 typedef struct ndr_serialtype1_priv_hdr ndr_serialtype1_priv_hdr_t;
228 EXTERNTYPEINFO(ndr_serialtype1_priv_hdr)
231 * MS-RPCE 2.2.7 Type Serialization Version 2 extensions Version 1 (2.2.6).
232 * The header must be little endian.
233 * The endianinfo and reserved fields must be set to 0xcccccccc during
234 * marshaling and ignored during unmarshaling.
237 struct ndr_serialtype2_hdr {
238 BYTE version; /* 00:01 1 */
239 BYTE endianness; /* 01:01 0=big, 1=little */
240 WORD hdrlen; /* 02:02 8 */
241 DWORD endianinfo; /* 04:04 0xcccccccc */
242 DWORD reserved[4]; /* 08:16 0xcccccccc */
243 ndr_p_syntax_id_t transfer_syntax; /* 24:20 */
244 ndr_p_syntax_id_t interface_id; /* 44:20 */
247 typedef struct ndr_serialtype2_hdr ndr_serialtype2_hdr_t;
248 EXTERNTYPEINFO(ndr_serialtype2_hdr)
251 * Type Serialization Version 2 Private Header.
252 * A private header must precede a top-level NDR constructed type.
255 struct ndr_serialtype2_priv_hdr {
256 DWORD buflen; /* 00:04 */
257 DWORD filler[3]; /* 04:12 must be zero */
260 typedef struct ndr_serialtype2_priv_hdr ndr_serialtype2_priv_hdr_t;
261 EXTERNTYPEINFO(ndr_serialtype2_priv_hdr)
264 * This header comes before the NDR-encoded KERB_VALIDATION_INFO structure,
265 * which can be found in one of the info buffers of the PAC.
269 ndr_serialtype1_hdr_t common_hdr;
270 ndr_serialtype1_priv_hdr_t priv_hdr;
273 typedef struct ndr_pac_hdr ndr_pac_hdr_t;
274 EXTERNTYPEINFO(ndr_pac_hdr)
277 * Supporting types (X/Open CAE Spec 12.6.3.1)
279 typedef WORD ndr_p_context_id_t;
282 struct ndr_p_cont_elem {
283 ndr_p_context_id_t p_cont_id;
286 ndr_p_syntax_id_t abstract_syntax;
287 /*SIZE_IS(n_transfer_syn)*/
288 ndr_p_syntax_id_t transfer_syntaxes[1];
290 typedef struct ndr_p_cont_elem ndr_p_cont_elem_t;
291 EXTERNTYPEINFO(ndr_p_cont_elem)
294 struct ndr_p_cont_list {
298 /*SIZE_IS(n_context_elem)*/
299 ndr_p_cont_elem_t p_cont_elem[1];
301 typedef struct ndr_p_cont_list ndr_p_cont_list_t;
302 EXTERNTYPEINFO(ndr_p_cont_list)
304 typedef WORD ndr_p_cont_def_result_t;
305 #define NDR_PCDR_ACCEPTANCE 0
306 #define NDR_PCDR_USER_REJECTION 1
307 #define NDR_PCDR_PROVIDER_REJECTION 2
310 * Reasons for provider rejection.
311 * X/Open CAE Spec 12.6.3.1
313 typedef WORD ndr_p_provider_reason_t;
314 #define NDR_PPR_REASON_NOT_SPECIFIED 0
315 #define NDR_PPR_ABSTRACT_SYNTAX_NOT_SUPPORTED 1
316 #define NDR_PPR_PROPOSED_TRANSFER_SYNTAXES_NOT_SUPPORTED 2
317 #define NDR_PPR_LOCAL_LIMIT_EXCEEDED 3
320 struct ndr_p_result {
321 ndr_p_cont_def_result_t result; /* NDR_PCDR_... */
322 ndr_p_provider_reason_t reason; /* NDR_PPR_... */
323 ndr_p_syntax_id_t transfer_syntax; /* 0-fill if result!=ACCEPT */
325 typedef struct ndr_p_result ndr_p_result_t;
326 EXTERNTYPEINFO(ndr_p_result)
329 struct ndr_p_result_list {
333 /*SIZE_IS(n_results)*/
334 ndr_p_result_t p_results[1];
336 typedef struct ndr_p_result_list ndr_p_result_list_t;
337 EXTERNTYPEINFO(ndr_p_result_list)
339 #define NDR_PORT_ANY_MAX_PORT_SPEC 30
341 struct ndr_port_any {
342 WORD length; /* always 18 */
344 BYTE port_spec[NDR_PORT_ANY_MAX_PORT_SPEC];
346 /* We cheat by using 18, and pad on the right with zeroes */
348 typedef struct ndr_port_any ndr_port_any_t;
349 EXTERNTYPEINFO(ndr_port_any)
352 * Reasons for rejecting an association in the bind_nak PDU.
353 * X/Open CAE Spec 12.6.3.1
356 #define NDR_REASON_NOT_SPECIFIED 0
357 #define NDR_TEMPORARY_CONGESTION 1
358 #define NDR_LOCAL_LIMIT_EXCEEDED 2
359 #define NDR_CALLED_PADDR_UNKNOWN 3
360 #define NDR_PROTOCOL_VERSION_NOT_SUPPORTED 4
361 #define NDR_DEFAULT_CONTEXT_NOT_SUPPORTED 5
362 #define NDR_USER_DATA_NOT_READABLE 6
363 #define NDR_NO_PSAP_AVAILABLE 7
364 #define NDR_AUTH_TYPE_NOT_RECOGNIZED 8
365 #define NDR_INAVLID_CHECKSUM 9
368 * Alter Context PDU (0x0E)
369 * (X/Open CAE Spec 12.6.4.1)
372 struct ndr_alter_context_hdr {
373 ndr_common_header_t common_hdr; /* 00:16 (see above) */
375 WORD max_xmit_frag; /* 16:02 ignored */
376 WORD max_recv_frag; /* 18:02 ignored */
377 DWORD assoc_group_id; /* 20:04 ignored */
380 * Presentation context list (see bind hdr comments).
382 ndr_p_cont_list_t p_context_elem; /* 24: */
384 /* optional authentication verifier if auth_length != 0 */
385 /* auth_verifier_co_t auth_verifier; */
387 typedef struct ndr_alter_context_hdr ndr_alter_context_hdr_t;
391 * Alter Context Response PDU (0x0F)
392 * (X/Open CAE Spec 12.6.4.2)
394 * We can't automatically generate an alter context response header because
395 * the sec_addr is an interior conformant (variable length) array, which is
396 * inconsistent with IDL/NDR rules. We mark this import-extern and provide
397 * a hand-coded marshalling function.
401 struct ndr_alter_context_rsp_hdr {
402 ndr_common_header_t common_hdr; /* 00:16 (see above) */
404 WORD max_xmit_frag; /* 16:02 ignored */
405 WORD max_recv_frag; /* 18:02 ignored */
406 DWORD assoc_group_id; /* 20:04 ignored */
407 ndr_port_any_t sec_addr; /* 24:20 ignored */
410 * Presentation context list (see bind hdr comments).
412 ndr_p_result_list_t p_result_list; /* 44:nn */
414 /* optional authentication verifier if auth_length != 0 */
415 /* auth_verifier_co_t auth_verifier; */
417 typedef struct ndr_alter_context_rsp_hdr ndr_alter_context_rsp_hdr_t;
422 * (X/Open CAE Spec 12.6.4.3)
425 struct ndr_bind_hdr {
426 ndr_common_header_t common_hdr; /* 00:16 (see above) */
428 WORD max_xmit_frag; /* 16:02 max xmit frag size, bytes */
429 WORD max_recv_frag; /* 18:02 max recv frag size, bytes */
430 DWORD assoc_group_id; /* 20:04 association group */
433 /* presentation, a variable**2 list, of presentation contexts */
434 ndr_p_cont_list_t p_context_elem;
437 * This could be followed by more transfer_syntaxes[] for the
438 * p_cont_elem[0], and subsequently followed by more p_cont_elem[],
439 * each with one or more transfer_syntaxes[]. A single
440 * p_cont_elem[] with a single transfer_syntaxes[] is so common,
441 * though, we embed it in the bind_hdr but the bind processor must
442 * walk through this tail if there is one.
445 /* optional authentication verifier iff auth_length != 0 */
446 /* auth_verifier_co_t auth_verifier; */
448 typedef struct ndr_bind_hdr ndr_bind_hdr_t;
452 * Bind_Ack PDU (0x0C)
453 * (X/Open CAE Spec 12.6.4.4)
455 * We can't automatically generate a bind ack header because the sec_addr
456 * is an interior conformant (variable length) array, which is inconsistent
457 * with IDL/NDR rules. We mark this import-extern and provide a hand-coded
458 * marshalling function.
462 struct ndr_bind_ack_hdr {
463 ndr_common_header_t common_hdr; /* 00:16 (see above) */
465 WORD max_xmit_frag; /* 16:02 max xmit frag size, bytes */
466 WORD max_recv_frag; /* 18:02 max recv frag size, bytes */
467 DWORD assoc_group_id; /* 20:04 association group */
468 ndr_port_any_t sec_addr; /* 24:20 */
470 ndr_p_result_list_t p_result_list; /* 44:nn */
471 /* This could be followed by more. See bind_hdr above */
473 /* optional authentication verifier iff auth_length != 0 */
474 /* auth_verifier_co_t auth_verifier; */
476 typedef struct ndr_bind_ack_hdr ndr_bind_ack_hdr_t;
481 ****************************************************************
482 * Two flavors, selected based on PFC_OBJECT_UUID in hdr.pfc_flags
483 * one without the "object" (flag clear)
484 * one with the "object" (flag set)
485 * (X/Open CAE Spec 12.6.4.9)
489 struct ndr_request_hdr {
490 ndr_common_header_t common_hdr; /* 00:16 (see above) */
492 /* needed for request, response, or fault */
493 DWORD alloc_hint; /* 16:04 allocation hint */
494 ndr_p_context_id_t p_cont_id; /* 20:02 pres context, i.e. data rep */
495 WORD opnum; /* 22:02 op number w/i interface */
497 /* optional field if PFC_OBJECT_UUID, not present */
498 /* ndr_uuid_t object; */
500 /* stub-data, 8-octet aligned */ /* 24:nn */
501 /* nn = frag_len - sizeof(common_header) - auth_len */
503 /* optional authentication verifier iff auth_length != 0 */
504 /* auth_verifier_co_t auth_verifier; */
506 typedef struct ndr_request_hdr ndr_request_hdr_t;
509 struct ndr_request_hdr_with_object {
510 ndr_common_header_t common_hdr; /* 00:16 (see above) */
512 /* needed for request, response, or fault */
513 DWORD alloc_hint; /* 16:04 allocation hint */
514 ndr_p_context_id_t p_cont_id; /* 20:02 pres context, i.e. data rep */
515 WORD opnum; /* 22:02 op number w/i interface */
517 /* optional field if PFC_OBJECT_UUID, is present */
518 ndr_uuid_t object; /* 24:16 object UUID, unknown purpose*/
520 /* stub-data, 8-octet aligned */ /* 28:nn */
521 /* nn = frag_len - sizeof(common_header) - auth_len */
522 /* nn -= sizeof(ndr_uuid_t); */
524 /* optional authentication verifier iff auth_length != 0 */
525 /* auth_verifier_co_t auth_verifier; */
530 * Convenient for response header sizing and multi-fragment responses.
531 * We know the header is going to be 24 bytes.
533 #define NDR_RSP_HDR_SIZE 24
537 * Response PDU (0x02)
538 * (X/Open CAE Spec 12.6.4.10)
542 struct ndr_response_hdr {
543 ndr_common_header_t common_hdr; /* 00:16 (see above) */
545 /* needed for request, response, or fault */
546 DWORD alloc_hint; /* 16:04 allocation hint */
547 ndr_p_context_id_t p_cont_id; /* 20:02 pres context, i.e. data rep */
549 /* needed for response or fault */
550 BYTE cancel_count; /* 22:01 cancel count */
551 BYTE reserved; /* 23:01 mbz */
553 /* stub-data, 8-octet aligned */ /* 24:nn */
554 /* nn = frag_len - sizeof(common_header) - auth_len */
556 /* optional authentication verifier iff auth_length != 0 */
557 /* auth_verifier_co_t auth_verifier; */
559 typedef struct ndr_response_hdr ndr_response_hdr_t;
564 * (X/Open CAE Spec 12.6.4.7)
568 struct ndr_fault_hdr {
569 ndr_common_header_t common_hdr; /* 00:16 (see above) */
571 DWORD alloc_hint; /* 16:04 allocation hint */
572 ndr_p_context_id_t p_cont_id; /* 20:02 pres context, i.e. data rep */
574 /* needed for response or fault */
575 BYTE cancel_count; /* 22:01 cancel count */
576 BYTE reserved; /* 23:01 mbz */
579 DWORD status; /* 24:04 run-time fault code or 0 */
581 /* pad to 8-byte alignment */
582 BYTE reserved2[4]; /* 28:04 must-be-zero */
584 /* stub-data here if status==0. We do not use this mode. */
586 /* optional authentication verifier iff auth_length != 0 */
587 /* auth_verifier_co_t auth_verifier; */
589 typedef struct ndr_fault_hdr ndr_fault_hdr_t;
592 /* Fault status code (X/Open CAE Spec Appendix E) */
593 #define NDR_FAULT_NCA_RPC_VERSION_MISMATCH 0x1c000008 /* CO/CL */
594 #define NDR_FAULT_NCA_UNSPEC_REJECT 0x1c000009 /* CO/CL */
595 #define NDR_FAULT_NCA_S_BAD_ACTID 0x1c00000A /* CL */
596 #define NDR_FAULT_NCA_WHO_ARE_YOU_FAILED 0x1c00000B /* CL */
597 #define NDR_FAULT_NCA_MANAGER_NOT_ENTERED 0x1c00000C /* CO/CL */
598 #define NDR_FAULT_NCA_OP_RNG_ERROR 0x1c010002 /* CO/CL */
599 #define NDR_FAULT_NCA_UNK_IF 0x1c010003 /* CO/CL */
600 #define NDR_FAULT_NCA_WRONG_BOOT_TIME 0x1c010006 /* CL */
601 #define NDR_FAULT_NCA_S_YOU_CRASHED 0x1c010009 /* CL */
602 #define NDR_FAULT_NCA_PROTO_ERROR 0x1c01000B /* CO/CL */
603 #define NDR_FAULT_NCA_OUT_ARGS_TOO_BIG 0x1c010013 /* CO/CL */
604 #define NDR_FAULT_NCA_SERVER_TOO_BUSY 0x1c010014 /* CO/CL */
605 #define NDR_FAULT_NCA_UNSUPPORTED_TYPE 0x1c010017 /* CO/CL */
606 #define NDR_FAULT_NCA_INVALID_PRES_CONTEXT_ID 0x1c00001c /* CO */
607 #define NDR_FAULT_NCA_UNSUPPORTED_AUTHN_LEVEL 0x1c00001d /* CO/CL */
608 #define NDR_FAULT_NCA_INVALID_CHECKSUM 0x1c00001f /* CO/CL */
609 #define NDR_FAULT_NCA_INVALID_CRC 0x1c000020 /* CO/CL */
613 * The Header Union/Switch
614 ****************************************************************
617 #define NDR_PTYPE_COMMON 999
618 #define NDR_PTYPE_REQUEST_WITH 998
619 #define NDR_PTYPE_SERIALTYPE_V1 997
620 #define NDR_PTYPE_SERIALTYPE_V2 996
621 #define NDR_PTYPE_PAC 995
625 CASE(NDR_PTYPE_COMMON) /* exceeds BYTE range, obtains common hdr */
626 struct ndr_common_header common_hdr;
629 struct ndr_bind_hdr bind_hdr;
631 CASE(NDR_PTYPE_BIND_ACK)
632 struct ndr_bind_ack_hdr bind_ack_hdr;
634 CASE(NDR_PTYPE_REQUEST)
635 struct ndr_request_hdr request_hdr;
637 CASE(NDR_PTYPE_REQUEST_WITH) /* exceeds BYTE range, ... */
638 struct ndr_request_hdr_with_object request_hdr_with;
640 CASE(NDR_PTYPE_RESPONSE)
641 struct ndr_response_hdr response_hdr;
643 CASE(NDR_PTYPE_ALTER_CONTEXT)
644 struct ndr_alter_context_hdr alter_context_hdr;
646 CASE(NDR_PTYPE_ALTER_CONTEXT_RESP)
647 struct ndr_alter_context_rsp_hdr alter_context_rsp_hdr;
649 CASE(NDR_PTYPE_SERIALTYPE_V1)
650 struct ndr_serialtype1_hdr serialtype1_hdr;
652 CASE(NDR_PTYPE_SERIALTYPE_V2)
653 struct ndr_serialtype2_hdr serialtype2_hdr;
656 struct ndr_pac_hdr pac_hdr;
658 CASE(NDR_PTYPE_FAULT)
659 struct ndr_fault_hdr fault_hdr;
661 typedef union ndr_hdr ndr_hdr_t;
662 EXTERNTYPEINFO(ndr_hdr)
664 #endif /* _RPCPDU_NDL_ */