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 (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 23 */ 24 25#ifndef _RPCPDU_NDL_ 26#define _RPCPDU_NDL_ 27 28#include "ndrtypes.ndl" 29 30/* 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. 35 */ 36#ifdef NDRGEN 37#define _NO_REORDER_ [_no_reorder] 38#else 39#define _NO_REORDER_ 40#endif 41 42#define NDR_TRANSFER_SYNTAX_UUID "8a885d04-1ceb-11c9-9fe8-08002b104860" 43 44/* 45 * UUID (Universal Unique IDentifier) 46 */ 47/* (X/Open CAE Spec Appendix A) */ 48struct ndr_dce_uuid { 49 DWORD time_low; 50 WORD time_mid; 51 WORD time_hi_and_version; 52 BYTE clock_seq_hi_and_reserved; 53 BYTE clock_seq_low; 54 BYTE node[6]; 55}; 56 57struct ndr_uuid { 58 DWORD data1; 59 WORD data2; 60 WORD data3; 61 BYTE data4[8]; 62}; 63typedef struct ndr_uuid ndr_uuid_t; 64 65/* 66 * Representation label -- needed for RPC header 67 * (X/Open CAE Spec Chapter 14.1) 68 * 69 * Bits Data Type Description 70 * ---- --------- ----------- 71 * 0-3 charset 0=ASCII 72 * 1=EBCDIC 73 * 4-7 byte-order 0=big-endian 74 * 1=little-endian 75 * 8-15 float 0=IEEE 76 * 1=VAX 77 * 2=Cray 78 * 3=IBM 79 * 16-31 reserved 80 */ 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 91 92struct ndr_representation_label { 93 BYTE intg_char_rep; /* integer and charset */ 94 BYTE float_rep; 95 BYTE _spare[2]; 96}; 97typedef struct ndr_representation_label ndr_replab_t; 98 99 100 101/* 102 * RPC PDU (Protocol Data Unit) types 103 **************************************************************** 104 * (X/Open CAE Spec 12.1) 105 */ 106 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 */ 127 128/* 129 * Flags in the RPC header for Connection-oriented PDU data types 130 * (X/Open CAE Spec 12.6.3.1) 131 * 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. 136 */ 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 /* */ 148 149/* 150 * Security Providers 151 * MS-RPCE 2.2.1.1.6 152 */ 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 */ 159 160/* 161 * Encoding protection levels 162 * X/Open CAE Spec 13.1.2.1 163 * MS-RPCE 2.2.1.1.7 164 */ 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 172 173/* 174 * Header common to all Connection-oriented RPC PDUs 175 * (X/Open CAE Spec 12.6.3.1) 176 */ 177_NO_REORDER_ 178struct ndr_p_syntax_id { 179 ndr_uuid_t if_uuid; 180 DWORD if_version; 181}; 182typedef struct ndr_p_syntax_id ndr_p_syntax_id_t; 183 184_NO_REORDER_ 185struct 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 */ 195 /* 16: */ 196}; 197typedef struct ndr_common_header ndr_common_header_t; 198EXTERNTYPEINFO(ndr_common_header) 199 200/* 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. 205 */ 206_NO_REORDER_ 207struct 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 */ 212 /* 8: */ 213}; 214typedef struct ndr_serialtype1_hdr ndr_serialtype1_hdr_t; 215EXTERNTYPEINFO(ndr_serialtype1_hdr) 216 217/* 218 * Type Serialization Version 1 Private Header. 219 * A private header must precede a top-level NDR constructed type. 220 */ 221_NO_REORDER_ 222struct ndr_serialtype1_priv_hdr { 223 DWORD buflen; /* 00:04 */ 224 DWORD filler; /* 04:04 must be zero */ 225 /* 8: */ 226}; 227typedef struct ndr_serialtype1_priv_hdr ndr_serialtype1_priv_hdr_t; 228EXTERNTYPEINFO(ndr_serialtype1_priv_hdr) 229 230/* 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. 235 */ 236_NO_REORDER_ 237struct 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 */ 245 /* 64: */ 246}; 247typedef struct ndr_serialtype2_hdr ndr_serialtype2_hdr_t; 248EXTERNTYPEINFO(ndr_serialtype2_hdr) 249 250/* 251 * Type Serialization Version 2 Private Header. 252 * A private header must precede a top-level NDR constructed type. 253 */ 254_NO_REORDER_ 255struct ndr_serialtype2_priv_hdr { 256 DWORD buflen; /* 00:04 */ 257 DWORD filler[3]; /* 04:12 must be zero */ 258 /* 16: */ 259}; 260typedef struct ndr_serialtype2_priv_hdr ndr_serialtype2_priv_hdr_t; 261EXTERNTYPEINFO(ndr_serialtype2_priv_hdr) 262 263/* 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. 266 */ 267_NO_REORDER_ 268struct ndr_pac_hdr { 269 ndr_serialtype1_hdr_t common_hdr; 270 ndr_serialtype1_priv_hdr_t priv_hdr; 271 DWORD ref_pointer; 272}; 273typedef struct ndr_pac_hdr ndr_pac_hdr_t; 274EXTERNTYPEINFO(ndr_pac_hdr) 275 276/* 277 * Supporting types (X/Open CAE Spec 12.6.3.1) 278 */ 279typedef WORD ndr_p_context_id_t; 280 281_NO_REORDER_ 282struct ndr_p_cont_elem { 283 ndr_p_context_id_t p_cont_id; 284 BYTE n_transfer_syn; 285 BYTE _reserved; 286 ndr_p_syntax_id_t abstract_syntax; 287 /*SIZE_IS(n_transfer_syn)*/ 288 ndr_p_syntax_id_t transfer_syntaxes[1]; 289}; 290typedef struct ndr_p_cont_elem ndr_p_cont_elem_t; 291EXTERNTYPEINFO(ndr_p_cont_elem) 292 293_NO_REORDER_ 294struct ndr_p_cont_list { 295 BYTE n_context_elem; 296 BYTE _reserved; 297 WORD _reserved2; 298 /*SIZE_IS(n_context_elem)*/ 299 ndr_p_cont_elem_t p_cont_elem[1]; 300}; 301typedef struct ndr_p_cont_list ndr_p_cont_list_t; 302EXTERNTYPEINFO(ndr_p_cont_list) 303 304typedef 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 308 309/* 310 * Reasons for provider rejection. 311 * X/Open CAE Spec 12.6.3.1 312 */ 313typedef 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 318 319_NO_REORDER_ 320struct 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 */ 324}; 325typedef struct ndr_p_result ndr_p_result_t; 326EXTERNTYPEINFO(ndr_p_result) 327 328_NO_REORDER_ 329struct ndr_p_result_list { 330 BYTE n_results; 331 BYTE reserved; 332 WORD reserved2; 333 /*SIZE_IS(n_results)*/ 334 ndr_p_result_t p_results[1]; 335}; 336typedef struct ndr_p_result_list ndr_p_result_list_t; 337EXTERNTYPEINFO(ndr_p_result_list) 338 339#define NDR_PORT_ANY_MAX_PORT_SPEC 30 340_NO_REORDER_ 341struct ndr_port_any { 342 WORD length; /* always 18 */ 343 /*SIZE_IS(length)*/ 344 BYTE port_spec[NDR_PORT_ANY_MAX_PORT_SPEC]; 345 /* \PIPE\ntsvcs */ 346 /* We cheat by using 18, and pad on the right with zeroes */ 347}; 348typedef struct ndr_port_any ndr_port_any_t; 349EXTERNTYPEINFO(ndr_port_any) 350 351/* 352 * Reasons for rejecting an association in the bind_nak PDU. 353 * X/Open CAE Spec 12.6.3.1 354 * MS-RPCE 2.2.2.5 355 */ 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 366 367/* 368 * Alter Context PDU (0x0E) 369 * (X/Open CAE Spec 12.6.4.1) 370 */ 371_NO_REORDER_ 372struct ndr_alter_context_hdr { 373 ndr_common_header_t common_hdr; /* 00:16 (see above) */ 374 375 WORD max_xmit_frag; /* 16:02 ignored */ 376 WORD max_recv_frag; /* 18:02 ignored */ 377 DWORD assoc_group_id; /* 20:04 ignored */ 378 379 /* 380 * Presentation context list (see bind hdr comments). 381 */ 382 ndr_p_cont_list_t p_context_elem; /* 24: */ 383 384 /* optional authentication verifier if auth_length != 0 */ 385 /* auth_verifier_co_t auth_verifier; */ 386}; 387typedef struct ndr_alter_context_hdr ndr_alter_context_hdr_t; 388 389 390/* 391 * Alter Context Response PDU (0x0F) 392 * (X/Open CAE Spec 12.6.4.2) 393 * 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. 398 */ 399IMPORT_EXTERN 400_NO_REORDER_ 401struct ndr_alter_context_rsp_hdr { 402 ndr_common_header_t common_hdr; /* 00:16 (see above) */ 403 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 */ 408 409 /* 410 * Presentation context list (see bind hdr comments). 411 */ 412 ndr_p_result_list_t p_result_list; /* 44:nn */ 413 414 /* optional authentication verifier if auth_length != 0 */ 415 /* auth_verifier_co_t auth_verifier; */ 416}; 417typedef struct ndr_alter_context_rsp_hdr ndr_alter_context_rsp_hdr_t; 418 419 420/* 421 * Bind PDU (0x0B) 422 * (X/Open CAE Spec 12.6.4.3) 423 */ 424_NO_REORDER_ 425struct ndr_bind_hdr { 426 ndr_common_header_t common_hdr; /* 00:16 (see above) */ 427 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 */ 431 /* 24: */ 432 433 /* presentation, a variable**2 list, of presentation contexts */ 434 ndr_p_cont_list_t p_context_elem; 435 436 /* 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. 443 */ 444 445 /* optional authentication verifier iff auth_length != 0 */ 446 /* auth_verifier_co_t auth_verifier; */ 447}; 448typedef struct ndr_bind_hdr ndr_bind_hdr_t; 449 450 451/* 452 * Bind_Ack PDU (0x0C) 453 * (X/Open CAE Spec 12.6.4.4) 454 * 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. 459 */ 460IMPORT_EXTERN 461_NO_REORDER_ 462struct ndr_bind_ack_hdr { 463 ndr_common_header_t common_hdr; /* 00:16 (see above) */ 464 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 */ 469 470 ndr_p_result_list_t p_result_list; /* 44:nn */ 471 /* This could be followed by more. See bind_hdr above */ 472 473 /* optional authentication verifier iff auth_length != 0 */ 474 /* auth_verifier_co_t auth_verifier; */ 475}; 476typedef struct ndr_bind_ack_hdr ndr_bind_ack_hdr_t; 477 478 479/* 480 * Request PDU (0x00) 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) 486 */ 487 488_NO_REORDER_ 489struct ndr_request_hdr { 490 ndr_common_header_t common_hdr; /* 00:16 (see above) */ 491 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 */ 496 497 /* optional field if PFC_OBJECT_UUID, not present */ 498 /* ndr_uuid_t object; */ 499 500 /* stub-data, 8-octet aligned */ /* 24:nn */ 501 /* nn = frag_len - sizeof(common_header) - auth_len */ 502 503 /* optional authentication verifier iff auth_length != 0 */ 504 /* auth_verifier_co_t auth_verifier; */ 505}; 506typedef struct ndr_request_hdr ndr_request_hdr_t; 507 508_NO_REORDER_ 509struct ndr_request_hdr_with_object { 510 ndr_common_header_t common_hdr; /* 00:16 (see above) */ 511 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 */ 516 517 /* optional field if PFC_OBJECT_UUID, is present */ 518 ndr_uuid_t object; /* 24:16 object UUID, unknown purpose*/ 519 520 /* stub-data, 8-octet aligned */ /* 28:nn */ 521 /* nn = frag_len - sizeof(common_header) - auth_len */ 522 /* nn -= sizeof(ndr_uuid_t); */ 523 524 /* optional authentication verifier iff auth_length != 0 */ 525 /* auth_verifier_co_t auth_verifier; */ 526}; 527 528 529/* 530 * Convenient for response header sizing and multi-fragment responses. 531 * We know the header is going to be 24 bytes. 532 */ 533#define NDR_RSP_HDR_SIZE 24 534 535 536/* 537 * Response PDU (0x02) 538 * (X/Open CAE Spec 12.6.4.10) 539 */ 540 541_NO_REORDER_ 542struct ndr_response_hdr { 543 ndr_common_header_t common_hdr; /* 00:16 (see above) */ 544 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 */ 548 549 /* needed for response or fault */ 550 BYTE cancel_count; /* 22:01 cancel count */ 551 BYTE reserved; /* 23:01 mbz */ 552 553 /* stub-data, 8-octet aligned */ /* 24:nn */ 554 /* nn = frag_len - sizeof(common_header) - auth_len */ 555 556 /* optional authentication verifier iff auth_length != 0 */ 557 /* auth_verifier_co_t auth_verifier; */ 558}; 559typedef struct ndr_response_hdr ndr_response_hdr_t; 560 561 562/* 563 * Fault PDU (0x03) 564 * (X/Open CAE Spec 12.6.4.7) 565 */ 566 567_NO_REORDER_ 568struct ndr_fault_hdr { 569 ndr_common_header_t common_hdr; /* 00:16 (see above) */ 570 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 */ 573 574 /* needed for response or fault */ 575 BYTE cancel_count; /* 22:01 cancel count */ 576 BYTE reserved; /* 23:01 mbz */ 577 578 /* fault code */ 579 DWORD status; /* 24:04 run-time fault code or 0 */ 580 581 /* pad to 8-byte alignment */ 582 BYTE reserved2[4]; /* 28:04 must-be-zero */ 583 584 /* stub-data here if status==0. We do not use this mode. */ 585 586 /* optional authentication verifier iff auth_length != 0 */ 587 /* auth_verifier_co_t auth_verifier; */ 588}; 589typedef struct ndr_fault_hdr ndr_fault_hdr_t; 590 591 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 */ 610 611 612/* 613 * The Header Union/Switch 614 **************************************************************** 615 */ 616 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 622 623INTERFACE(0) 624union ndr_hdr { 625 CASE(NDR_PTYPE_COMMON) /* exceeds BYTE range, obtains common hdr */ 626 struct ndr_common_header common_hdr; 627 628 CASE(NDR_PTYPE_BIND) 629 struct ndr_bind_hdr bind_hdr; 630 631 CASE(NDR_PTYPE_BIND_ACK) 632 struct ndr_bind_ack_hdr bind_ack_hdr; 633 634 CASE(NDR_PTYPE_REQUEST) 635 struct ndr_request_hdr request_hdr; 636 637 CASE(NDR_PTYPE_REQUEST_WITH) /* exceeds BYTE range, ... */ 638 struct ndr_request_hdr_with_object request_hdr_with; 639 640 CASE(NDR_PTYPE_RESPONSE) 641 struct ndr_response_hdr response_hdr; 642 643 CASE(NDR_PTYPE_ALTER_CONTEXT) 644 struct ndr_alter_context_hdr alter_context_hdr; 645 646 CASE(NDR_PTYPE_ALTER_CONTEXT_RESP) 647 struct ndr_alter_context_rsp_hdr alter_context_rsp_hdr; 648 649 CASE(NDR_PTYPE_SERIALTYPE_V1) 650 struct ndr_serialtype1_hdr serialtype1_hdr; 651 652 CASE(NDR_PTYPE_SERIALTYPE_V2) 653 struct ndr_serialtype2_hdr serialtype2_hdr; 654 655 CASE(NDR_PTYPE_PAC) 656 struct ndr_pac_hdr pac_hdr; 657 658 CASE(NDR_PTYPE_FAULT) 659 struct ndr_fault_hdr fault_hdr; 660}; 661typedef union ndr_hdr ndr_hdr_t; 662EXTERNTYPEINFO(ndr_hdr) 663 664#endif /* _RPCPDU_NDL_ */ 665 666