1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2021 Tintri by DDN, Inc. All rights reserved.
*/
#ifndef _RPCPDU_NDL_
#define _RPCPDU_NDL_
#include "ndrtypes.ndl"
/*
* Normally, constructs are (un)marshalled atoms first, then
* constructs, then pointers. This can be confusing sometimes
* when debugging. We know that everything in here can be
* safely (un)marshalled in member order, so we say so.
*/
#ifdef NDRGEN
#define _NO_REORDER_ [_no_reorder]
#else
#define _NO_REORDER_
#endif
#define NDR_TRANSFER_SYNTAX_UUID "8a885d04-1ceb-11c9-9fe8-08002b104860"
/*
* UUID (Universal Unique IDentifier)
*/
/* (X/Open CAE Spec Appendix A) */
struct ndr_dce_uuid {
DWORD time_low;
WORD time_mid;
WORD time_hi_and_version;
BYTE clock_seq_hi_and_reserved;
BYTE clock_seq_low;
BYTE node[6];
};
struct ndr_uuid {
DWORD data1;
WORD data2;
WORD data3;
BYTE data4[8];
};
typedef struct ndr_uuid ndr_uuid_t;
/*
* Representation label -- needed for RPC header
* (X/Open CAE Spec Chapter 14.1)
*
* Bits Data Type Description
* ---- --------- -----------
* 0-3 charset 0=ASCII
* 1=EBCDIC
* 4-7 byte-order 0=big-endian
* 1=little-endian
* 8-15 float 0=IEEE
* 1=VAX
* 2=Cray
* 3=IBM
* 16-31 reserved
*/
#define NDR_REPLAB_CHAR_MASK 0x0F /* low nibble of intg_char */
#define NDR_REPLAB_CHAR_ASCII 0x00 /* ASCII */
#define NDR_REPLAB_CHAR_EBCDIC 0x01 /* EBCDIC (never happen) */
#define NDR_REPLAB_INTG_MASK 0xF0 /* hi nibble of intg_char */
#define NDR_REPLAB_INTG_BIG_ENDIAN 0x00 /* big endian */
#define NDR_REPLAB_INTG_LITTLE_ENDIAN 0x10 /* little endian (x86) */
#define NDR_REPLAB_FLOAT_IEEE 0x00
#define NDR_REPLAB_FLOAT_VAX 0x01
#define NDR_REPLAB_FLOAT_CRAY 0x02
#define NDR_REPLAB_FLOAT_IBM 0x03
struct ndr_representation_label {
BYTE intg_char_rep; /* integer and charset */
BYTE float_rep;
BYTE _spare[2];
};
typedef struct ndr_representation_label ndr_replab_t;
/*
* RPC PDU (Protocol Data Unit) types
****************************************************************
* (X/Open CAE Spec 12.1)
*/
#define NDR_PTYPE_REQUEST 0x00 /* CO/CL */
#define NDR_PTYPE_PING 0x01 /* CL */
#define NDR_PTYPE_RESPONSE 0x02 /* CO/CL */
#define NDR_PTYPE_FAULT 0x03 /* CL/CL */
#define NDR_PTYPE_WORKING 0x04 /* CL */
#define NDR_PTYPE_NOCALL 0x05 /* CL */
#define NDR_PTYPE_REJECT 0x06 /* CL */
#define NDR_PTYPE_ACK 0x07 /* CL */
#define NDR_PTYPE_CL_CANCEL 0x08 /* CL */
#define NDR_PTYPE_FACK 0x09 /* CL */
#define NDR_PTYPE_CANCEL_ACK 0x0A /* CL */
#define NDR_PTYPE_BIND 0x0B /* CO */
#define NDR_PTYPE_BIND_ACK 0x0C /* CO */
#define NDR_PTYPE_BIND_NAK 0x0D /* CO */
#define NDR_PTYPE_ALTER_CONTEXT 0x0E /* CO */
#define NDR_PTYPE_ALTER_CONTEXT_RESP 0x0F /* CO */
/* 0x10 missing from DCE/RPC */
#define NDR_PTYPE_SHUTDOWN 0x11 /* CO */
#define NDR_PTYPE_CO_CANCEL 0x12 /* CO */
#define NDR_PTYPE_ORPHANED 0x13 /* CO */
/*
* Flags in the RPC header for Connection-oriented PDU data types
* (X/Open CAE Spec 12.6.3.1)
*
* MS-RPCE 2.2.2.3 PFC_SUPPORT_HEADER_SIGN
* For PDU types bind, bind_ack, alter_context and alter_context_resp,
* 0x04 means PFC_SUPPORT_HEADER_SIGN.
* For other PDU types 0x04 means PFC_PENDING_CANCEL.
*/
#define NDR_PFC_FIRST_FRAG 0x01 /* First fragment */
#define NDR_PFC_LAST_FRAG 0x02 /* Last framgent */
#define NDR_PFC_PENDING_CANCEL 0x04 /* Cancel was pending@sender*/
#define NDR_PFC_SUPPORT_HEADER_SIGN NDR_PFC_PENDING_CANCEL
#define NDR_PFC_RESERVED_1 0x08 /* */
#define NDR_PFC_CONC_MPX 0x10 /* supports concurrent muxing
* of single connection */
#define NDR_PFC_DID_NOT_EXECUTE 0x20 /* for PTYPE_FAULT, guarantee
* call did not execute */
#define NDR_PFC_MAYBE 0x40 /* "maybe" semantics req'ed*/
#define NDR_PFC_OBJECT_UUID 0x80 /* */
/*
* Security Providers
* MS-RPCE 2.2.1.1.6
*/
#define NDR_C_AUTHN_NONE 0x00 /* No authentication */
#define NDR_C_AUTHN_GSS_NEGOTIATE 0x09 /* SPNEGO */
#define NDR_C_AUTHN_WINNT 0x0A /* NTLM */
#define NDR_C_AUTHN_GSS_KERBEROS 0x10 /* Kerberos */
#define NDR_C_AUTHN_GSS_NETLOGON 0x44 /* Netlogon */
#define NDR_C_AUTHN_GSS_DEFAULT 0xFF /* Default is NTLM */
/*
* Encoding protection levels
* X/Open CAE Spec 13.1.2.1
* MS-RPCE 2.2.1.1.7
*/
#define NDR_C_AUTHN_LEVEL_DEFAULT 0x00 /* Same as Connect */
#define NDR_C_AUTHN_LEVEL_NONE 0x01
#define NDR_C_AUTHN_LEVEL_CONNECT 0x02
#define NDR_C_AUTHN_LEVEL_CALL 0x03
#define NDR_C_AUTHN_LEVEL_PKT 0x04
#define NDR_C_AUTHN_LEVEL_PKT_INTEGRITY 0x05
#define NDR_C_AUTHN_LEVEL_PKT_PRIVACY 0x06
/*
* Header common to all Connection-oriented RPC PDUs
* (X/Open CAE Spec 12.6.3.1)
*/
_NO_REORDER_
struct ndr_p_syntax_id {
ndr_uuid_t if_uuid;
DWORD if_version;
};
typedef struct ndr_p_syntax_id ndr_p_syntax_id_t;
_NO_REORDER_
struct ndr_common_header {
BYTE rpc_vers; /* 00:01 5 */
BYTE rpc_vers_minor; /* 01:01 0 */
BYTE ptype; /* 02:01 NDR_PTYPE_... */
BYTE pfc_flags; /* 03:01 NDR_PFC_... */
struct ndr_representation_label
packed_drep; /* 04:04 NDR representation label */
WORD frag_length; /* 08:02 total length of frag */
WORD auth_length; /* 10:02 length of auth_value */
DWORD call_id; /* 12:04 call identifier */
/* 16: */
};
typedef struct ndr_common_header ndr_common_header_t;
EXTERNTYPEINFO(ndr_common_header)
/*
* MS-RPCE 2.2.6 Type Serialization Version 1 extensions to IDL/+ pickle
* One header per serialization stream: the header must be little endian.
* The filler must be set to 0xcccccccc during marshaling and ignored
* during unmarshaling.
*/
_NO_REORDER_
struct ndr_serialtype1_hdr {
BYTE version; /* 00:01 1 */
BYTE endianness; /* 01:01 0=big, 1=little */
WORD hdrlen; /* 02:02 8 */
DWORD filler; /* 04:04 0xcccccccc */
/* 8: */
};
typedef struct ndr_serialtype1_hdr ndr_serialtype1_hdr_t;
EXTERNTYPEINFO(ndr_serialtype1_hdr)
/*
* Type Serialization Version 1 Private Header.
* A private header must precede a top-level NDR constructed type.
*/
_NO_REORDER_
struct ndr_serialtype1_priv_hdr {
DWORD buflen; /* 00:04 */
DWORD filler; /* 04:04 must be zero */
/* 8: */
};
typedef struct ndr_serialtype1_priv_hdr ndr_serialtype1_priv_hdr_t;
EXTERNTYPEINFO(ndr_serialtype1_priv_hdr)
/*
* MS-RPCE 2.2.7 Type Serialization Version 2 extensions Version 1 (2.2.6).
* The header must be little endian.
* The endianinfo and reserved fields must be set to 0xcccccccc during
* marshaling and ignored during unmarshaling.
*/
_NO_REORDER_
struct ndr_serialtype2_hdr {
BYTE version; /* 00:01 1 */
BYTE endianness; /* 01:01 0=big, 1=little */
WORD hdrlen; /* 02:02 8 */
DWORD endianinfo; /* 04:04 0xcccccccc */
DWORD reserved[4]; /* 08:16 0xcccccccc */
ndr_p_syntax_id_t transfer_syntax; /* 24:20 */
ndr_p_syntax_id_t interface_id; /* 44:20 */
/* 64: */
};
typedef struct ndr_serialtype2_hdr ndr_serialtype2_hdr_t;
EXTERNTYPEINFO(ndr_serialtype2_hdr)
/*
* Type Serialization Version 2 Private Header.
* A private header must precede a top-level NDR constructed type.
*/
_NO_REORDER_
struct ndr_serialtype2_priv_hdr {
DWORD buflen; /* 00:04 */
DWORD filler[3]; /* 04:12 must be zero */
/* 16: */
};
typedef struct ndr_serialtype2_priv_hdr ndr_serialtype2_priv_hdr_t;
EXTERNTYPEINFO(ndr_serialtype2_priv_hdr)
/*
* This header comes before the NDR-encoded KERB_VALIDATION_INFO structure,
* which can be found in one of the info buffers of the PAC.
*/
_NO_REORDER_
struct ndr_pac_hdr {
ndr_serialtype1_hdr_t common_hdr;
ndr_serialtype1_priv_hdr_t priv_hdr;
DWORD ref_pointer;
};
typedef struct ndr_pac_hdr ndr_pac_hdr_t;
EXTERNTYPEINFO(ndr_pac_hdr)
/*
* Supporting types (X/Open CAE Spec 12.6.3.1)
*/
typedef WORD ndr_p_context_id_t;
_NO_REORDER_
struct ndr_p_cont_elem {
ndr_p_context_id_t p_cont_id;
BYTE n_transfer_syn;
BYTE _reserved;
ndr_p_syntax_id_t abstract_syntax;
/*SIZE_IS(n_transfer_syn)*/
ndr_p_syntax_id_t transfer_syntaxes[1];
};
typedef struct ndr_p_cont_elem ndr_p_cont_elem_t;
EXTERNTYPEINFO(ndr_p_cont_elem)
_NO_REORDER_
struct ndr_p_cont_list {
BYTE n_context_elem;
BYTE _reserved;
WORD _reserved2;
/*SIZE_IS(n_context_elem)*/
ndr_p_cont_elem_t p_cont_elem[1];
};
typedef struct ndr_p_cont_list ndr_p_cont_list_t;
EXTERNTYPEINFO(ndr_p_cont_list)
typedef WORD ndr_p_cont_def_result_t;
#define NDR_PCDR_ACCEPTANCE 0
#define NDR_PCDR_USER_REJECTION 1
#define NDR_PCDR_PROVIDER_REJECTION 2
/*
* Reasons for provider rejection.
* X/Open CAE Spec 12.6.3.1
*/
typedef WORD ndr_p_provider_reason_t;
#define NDR_PPR_REASON_NOT_SPECIFIED 0
#define NDR_PPR_ABSTRACT_SYNTAX_NOT_SUPPORTED 1
#define NDR_PPR_PROPOSED_TRANSFER_SYNTAXES_NOT_SUPPORTED 2
#define NDR_PPR_LOCAL_LIMIT_EXCEEDED 3
_NO_REORDER_
struct ndr_p_result {
ndr_p_cont_def_result_t result; /* NDR_PCDR_... */
ndr_p_provider_reason_t reason; /* NDR_PPR_... */
ndr_p_syntax_id_t transfer_syntax; /* 0-fill if result!=ACCEPT */
};
typedef struct ndr_p_result ndr_p_result_t;
EXTERNTYPEINFO(ndr_p_result)
_NO_REORDER_
struct ndr_p_result_list {
BYTE n_results;
BYTE reserved;
WORD reserved2;
/*SIZE_IS(n_results)*/
ndr_p_result_t p_results[1];
};
typedef struct ndr_p_result_list ndr_p_result_list_t;
EXTERNTYPEINFO(ndr_p_result_list)
#define NDR_PORT_ANY_MAX_PORT_SPEC 30
_NO_REORDER_
struct ndr_port_any {
WORD length; /* always 18 */
/*SIZE_IS(length)*/
BYTE port_spec[NDR_PORT_ANY_MAX_PORT_SPEC];
/* \PIPE\ntsvcs */
/* We cheat by using 18, and pad on the right with zeroes */
};
typedef struct ndr_port_any ndr_port_any_t;
EXTERNTYPEINFO(ndr_port_any)
/*
* Reasons for rejecting an association in the bind_nak PDU.
* X/Open CAE Spec 12.6.3.1
* MS-RPCE 2.2.2.5
*/
#define NDR_REASON_NOT_SPECIFIED 0
#define NDR_TEMPORARY_CONGESTION 1
#define NDR_LOCAL_LIMIT_EXCEEDED 2
#define NDR_CALLED_PADDR_UNKNOWN 3
#define NDR_PROTOCOL_VERSION_NOT_SUPPORTED 4
#define NDR_DEFAULT_CONTEXT_NOT_SUPPORTED 5
#define NDR_USER_DATA_NOT_READABLE 6
#define NDR_NO_PSAP_AVAILABLE 7
#define NDR_AUTH_TYPE_NOT_RECOGNIZED 8
#define NDR_INVALID_CHECKSUM 9
/*
* NDRGEN can't handle variable-length arrays, so we provide our own
* marshal/unmarshal routine, so that we can convert to and from
* our pointer and a fixed-size array.
*
* NOTE: MS-RPCE calls this a sec_trailer_t, so we use ndr_sec_t.
* auth_value should also be an ANY_SIZE_ARRAY, but NDRGEN can't handle
* variable-sized arrays.
*/
IMPORT_EXTERN
_NO_REORDER_
struct auth_verifier_co {
/* restore 16 byte alignment */
/* SIZE_IS(auth_pad_len) */
/* BYTE auth_pad[ANY_SIZE_ARRAY] */ /* align(16) */
BYTE auth_type; /* 00:01 */
BYTE auth_level; /* 01:01 */
BYTE auth_pad_len; /* 02:01 */
BYTE auth_rsvd; /* 03:01 */
DWORD auth_context_id; /* 04:04 */
/* SIZE_IS(hdr->auth_length) */
BYTE *auth_value; /* 08:* credentials */
};
typedef struct auth_verifier_co ndr_sec_t;
EXTERNTYPEINFO(auth_verifier_co)
#define SEC_TRAILER_SIZE 8
/*
* Alter Context PDU (0x0E)
* (X/Open CAE Spec 12.6.4.1)
*/
_NO_REORDER_
struct ndr_alter_context_hdr {
ndr_common_header_t common_hdr; /* 00:16 (see above) */
WORD max_xmit_frag; /* 16:02 ignored */
WORD max_recv_frag; /* 18:02 ignored */
DWORD assoc_group_id; /* 20:04 ignored */
/*
* Presentation context list (see bind hdr comments).
*/
ndr_p_cont_list_t p_context_elem; /* 24: */
/* optional authentication verifier if auth_length != 0 */
/* auth_verifier_co_t auth_verifier; */
};
typedef struct ndr_alter_context_hdr ndr_alter_context_hdr_t;
/*
* Alter Context Response PDU (0x0F)
* (X/Open CAE Spec 12.6.4.2)
*
* We can't automatically generate an alter context response header because
* the sec_addr is an interior conformant (variable length) array, which is
* inconsistent with IDL/NDR rules. We mark this import-extern and provide
* a hand-coded marshalling function.
*/
IMPORT_EXTERN
_NO_REORDER_
struct ndr_alter_context_rsp_hdr {
ndr_common_header_t common_hdr; /* 00:16 (see above) */
WORD max_xmit_frag; /* 16:02 ignored */
WORD max_recv_frag; /* 18:02 ignored */
DWORD assoc_group_id; /* 20:04 ignored */
ndr_port_any_t sec_addr; /* 24:20 ignored */
/*
* Presentation context list (see bind hdr comments).
*/
ndr_p_result_list_t p_result_list; /* 44:nn */
/* optional authentication verifier if auth_length != 0 */
/* auth_verifier_co_t auth_verifier; */
};
typedef struct ndr_alter_context_rsp_hdr ndr_alter_context_rsp_hdr_t;
/*
* Bind PDU (0x0B)
* (X/Open CAE Spec 12.6.4.3)
*/
_NO_REORDER_
struct ndr_bind_hdr {
ndr_common_header_t common_hdr; /* 00:16 (see above) */
WORD max_xmit_frag; /* 16:02 max xmit frag size, bytes */
WORD max_recv_frag; /* 18:02 max recv frag size, bytes */
DWORD assoc_group_id; /* 20:04 association group */
/* 24: */
/* presentation, a variable**2 list, of presentation contexts */
ndr_p_cont_list_t p_context_elem;
/*
* This could be followed by more transfer_syntaxes[] for the
* p_cont_elem[0], and subsequently followed by more p_cont_elem[],
* each with one or more transfer_syntaxes[]. A single
* p_cont_elem[] with a single transfer_syntaxes[] is so common,
* though, we embed it in the bind_hdr but the bind processor must
* walk through this tail if there is one.
*/
/* optional authentication verifier iff auth_length != 0 */
/* auth_verifier_co_t auth_verifier; */
};
typedef struct ndr_bind_hdr ndr_bind_hdr_t;
/*
* Bind_Ack PDU (0x0C)
* (X/Open CAE Spec 12.6.4.4)
*
* We can't automatically generate a bind ack header because the sec_addr
* is an interior conformant (variable length) array, which is inconsistent
* with IDL/NDR rules. We mark this import-extern and provide a hand-coded
* marshalling function.
*/
IMPORT_EXTERN
_NO_REORDER_
struct ndr_bind_ack_hdr {
ndr_common_header_t common_hdr; /* 00:16 (see above) */
WORD max_xmit_frag; /* 16:02 max xmit frag size, bytes */
WORD max_recv_frag; /* 18:02 max recv frag size, bytes */
DWORD assoc_group_id; /* 20:04 association group */
ndr_port_any_t sec_addr; /* 24:20 */
ndr_p_result_list_t p_result_list; /* 44:nn */
/* This could be followed by more. See bind_hdr above */
/* optional authentication verifier iff auth_length != 0 */
/* auth_verifier_co_t auth_verifier; */
};
typedef struct ndr_bind_ack_hdr ndr_bind_ack_hdr_t;
/*
* Request PDU (0x00)
****************************************************************
* Two flavors, selected based on PFC_OBJECT_UUID in hdr.pfc_flags
* one without the "object" (flag clear)
* one with the "object" (flag set)
* (X/Open CAE Spec 12.6.4.9)
*/
_NO_REORDER_
struct ndr_request_hdr {
ndr_common_header_t common_hdr; /* 00:16 (see above) */
/* needed for request, response, or fault */
DWORD alloc_hint; /* 16:04 allocation hint */
ndr_p_context_id_t p_cont_id; /* 20:02 pres context, i.e. data rep */
WORD opnum; /* 22:02 op number w/i interface */
/* optional field if PFC_OBJECT_UUID, not present */
/* ndr_uuid_t object; */
/* stub-data, 8-octet aligned */ /* 24:nn */
/* nn = frag_len - sizeof(common_header) - auth_len */
/* optional authentication verifier iff auth_length != 0 */
/* auth_verifier_co_t auth_verifier; */
};
typedef struct ndr_request_hdr ndr_request_hdr_t;
_NO_REORDER_
struct ndr_request_hdr_with_object {
ndr_common_header_t common_hdr; /* 00:16 (see above) */
/* needed for request, response, or fault */
DWORD alloc_hint; /* 16:04 allocation hint */
ndr_p_context_id_t p_cont_id; /* 20:02 pres context, i.e. data rep */
WORD opnum; /* 22:02 op number w/i interface */
/* optional field if PFC_OBJECT_UUID, is present */
ndr_uuid_t object; /* 24:16 object UUID, unknown purpose*/
/* stub-data, 8-octet aligned */ /* 28:nn */
/* nn = frag_len - sizeof(common_header) - auth_len */
/* nn -= sizeof(ndr_uuid_t); */
/* optional authentication verifier iff auth_length != 0 */
/* auth_verifier_co_t auth_verifier; */
};
/*
* Convenient for response header sizing and multi-fragment responses.
* We know the header is going to be 24 bytes, and the 'common' part
* is 16 bytes.
*/
#define NDR_CMN_HDR_SIZE 16
#define NDR_RSP_HDR_SIZE 24
/*
* Response PDU (0x02)
* (X/Open CAE Spec 12.6.4.10)
*/
_NO_REORDER_
struct ndr_response_hdr {
ndr_common_header_t common_hdr; /* 00:16 (see above) */
/* needed for request, response, or fault */
DWORD alloc_hint; /* 16:04 allocation hint */
ndr_p_context_id_t p_cont_id; /* 20:02 pres context, i.e. data rep */
/* needed for response or fault */
BYTE cancel_count; /* 22:01 cancel count */
BYTE reserved; /* 23:01 mbz */
/* stub-data, 8-octet aligned */ /* 24:nn */
/* nn = frag_len - sizeof(common_header) - auth_len */
/* optional authentication verifier iff auth_length != 0 */
/* auth_verifier_co_t auth_verifier; */
};
typedef struct ndr_response_hdr ndr_response_hdr_t;
/*
* Fault PDU (0x03)
* (X/Open CAE Spec 12.6.4.7)
*/
_NO_REORDER_
struct ndr_fault_hdr {
ndr_common_header_t common_hdr; /* 00:16 (see above) */
DWORD alloc_hint; /* 16:04 allocation hint */
ndr_p_context_id_t p_cont_id; /* 20:02 pres context, i.e. data rep */
/* needed for response or fault */
BYTE cancel_count; /* 22:01 cancel count */
BYTE reserved; /* 23:01 mbz */
/* fault code */
DWORD status; /* 24:04 run-time fault code or 0 */
/* pad to 8-byte alignment */
BYTE reserved2[4]; /* 28:04 must-be-zero */
/* stub-data here if status==0. We do not use this mode. */
/* optional authentication verifier iff auth_length != 0 */
/* auth_verifier_co_t auth_verifier; */
};
typedef struct ndr_fault_hdr ndr_fault_hdr_t;
/* Fault status code (X/Open CAE Spec Appendix E) */
#define NDR_FAULT_NCA_RPC_VERSION_MISMATCH 0x1c000008 /* CO/CL */
#define NDR_FAULT_NCA_UNSPEC_REJECT 0x1c000009 /* CO/CL */
#define NDR_FAULT_NCA_S_BAD_ACTID 0x1c00000A /* CL */
#define NDR_FAULT_NCA_WHO_ARE_YOU_FAILED 0x1c00000B /* CL */
#define NDR_FAULT_NCA_MANAGER_NOT_ENTERED 0x1c00000C /* CO/CL */
#define NDR_FAULT_NCA_OP_RNG_ERROR 0x1c010002 /* CO/CL */
#define NDR_FAULT_NCA_UNK_IF 0x1c010003 /* CO/CL */
#define NDR_FAULT_NCA_WRONG_BOOT_TIME 0x1c010006 /* CL */
#define NDR_FAULT_NCA_S_YOU_CRASHED 0x1c010009 /* CL */
#define NDR_FAULT_NCA_PROTO_ERROR 0x1c01000B /* CO/CL */
#define NDR_FAULT_NCA_OUT_ARGS_TOO_BIG 0x1c010013 /* CO/CL */
#define NDR_FAULT_NCA_SERVER_TOO_BUSY 0x1c010014 /* CO/CL */
#define NDR_FAULT_NCA_UNSUPPORTED_TYPE 0x1c010017 /* CO/CL */
#define NDR_FAULT_NCA_INVALID_PRES_CONTEXT_ID 0x1c00001c /* CO */
#define NDR_FAULT_NCA_UNSUPPORTED_AUTHN_LEVEL 0x1c00001d /* CO/CL */
#define NDR_FAULT_NCA_INVALID_CHECKSUM 0x1c00001f /* CO/CL */
#define NDR_FAULT_NCA_INVALID_CRC 0x1c000020 /* CO/CL */
/*
* The Header Union/Switch
****************************************************************
*/
#define NDR_PTYPE_COMMON 999
#define NDR_PTYPE_REQUEST_WITH 998
#define NDR_PTYPE_SERIALTYPE_V1 997
#define NDR_PTYPE_SERIALTYPE_V2 996
#define NDR_PTYPE_PAC 995
INTERFACE(0)
union ndr_hdr {
CASE(NDR_PTYPE_COMMON) /* exceeds BYTE range, obtains common hdr */
struct ndr_common_header common_hdr;
CASE(NDR_PTYPE_BIND)
struct ndr_bind_hdr bind_hdr;
CASE(NDR_PTYPE_BIND_ACK)
struct ndr_bind_ack_hdr bind_ack_hdr;
CASE(NDR_PTYPE_REQUEST)
struct ndr_request_hdr request_hdr;
CASE(NDR_PTYPE_REQUEST_WITH) /* exceeds BYTE range, ... */
struct ndr_request_hdr_with_object request_hdr_with;
CASE(NDR_PTYPE_RESPONSE)
struct ndr_response_hdr response_hdr;
CASE(NDR_PTYPE_ALTER_CONTEXT)
struct ndr_alter_context_hdr alter_context_hdr;
CASE(NDR_PTYPE_ALTER_CONTEXT_RESP)
struct ndr_alter_context_rsp_hdr alter_context_rsp_hdr;
CASE(NDR_PTYPE_SERIALTYPE_V1)
struct ndr_serialtype1_hdr serialtype1_hdr;
CASE(NDR_PTYPE_SERIALTYPE_V2)
struct ndr_serialtype2_hdr serialtype2_hdr;
CASE(NDR_PTYPE_PAC)
struct ndr_pac_hdr pac_hdr;
CASE(NDR_PTYPE_FAULT)
struct ndr_fault_hdr fault_hdr;
};
typedef union ndr_hdr ndr_hdr_t;
EXTERNTYPEINFO(ndr_hdr)
#endif /* _RPCPDU_NDL_ */
|