1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef __LPMAPI_H_
7 #define __LPMAPI_H_
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #ifndef CALLBACK
14 #if defined(_ARM_)
15 #define CALLBACK
16 #else
17 #define CALLBACK __stdcall
18 #endif
19 #endif
20 
21 #ifndef WINAPI
22 #if defined(_ARM_)
23 #define WINAPI
24 #else
25 #define WINAPI __stdcall
26 #endif
27 #endif
28 
29 #ifndef APIENTRY
30 #define APIENTRY WINAPI
31 #endif
32 
33   typedef struct {
34     USHORT obj_length;
35     UCHAR obj_class;
36     UCHAR obj_ctype;
37   } RsvpObjHdr;
38 
39 #define ObjLength(x) ((RsvpObjHdr *)x)->obj_length
40 #define ObjCType(x) ((RsvpObjHdr *)x)->obj_ctype
41 #define ObjClass(x) ((RsvpObjHdr *)x)->obj_class
42 #define ObjData(x) ((RsvpObjHdr *)(x)+1)
43 
44 #define class_NULL 0
45 #define class_SESSION 1
46 #define class_SESSION_GROUP 2
47 #define class_RSVP_HOP 3
48 #define class_INTEGRITY 4
49 #define class_TIME_VALUES 5
50 #define class_ERROR_SPEC 6
51 #define class_SCOPE 7
52 #define class_STYLE 8
53 #define class_FLOWSPEC 9
54 #define class_IS_FLOWSPEC 9
55 #define class_FILTER_SPEC 10
56 #define class_SENDER_TEMPLATE 11
57 #define class_SENDER_TSPEC 12
58 #define class_ADSPEC 13
59 #define class_POLICY_DATA 14
60 #define class_CONFIRM 15
61 #define class_MAX 15
62 
63 #define ctype_SESSION_ipv4 1
64 #define ctype_SESSION_ipv4GPI 3
65 
66 #define SESSFLG_E_Police 0x01
67 
68   typedef struct {
69     IN_ADDR sess_destaddr;
70     UCHAR sess_protid;
71     UCHAR sess_flags;
72     USHORT sess_destport;
73   } Session_IPv4;
74 
75   typedef struct {
76     RsvpObjHdr sess_header;
77     union {
78       Session_IPv4 sess_ipv4;
79     } sess_u;
80   } RSVP_SESSION;
81 
82 #define Sess4Addr sess_u.sess_ipv4.sess_destaddr
83 #define Sess4Port sess_u.sess_ipv4.sess_destport
84 #define Sess4Protocol sess_u.sess_ipv4.sess_protid
85 #define Sess4Flags sess_u.sess_ipv4.sess_flags
86 
87 #define ctype_RSVP_HOP_ipv4 1
88 
89   typedef struct {
90     IN_ADDR hop_ipaddr;
91     ULONG hop_LIH;
92   } Rsvp_Hop_IPv4;
93 
94   typedef struct {
95     RsvpObjHdr hop_header;
96     union {
97       Rsvp_Hop_IPv4 hop_ipv4;
98     } hop_u;
99   } RSVP_HOP;
100 
101 #define Hop4LIH hop_u.hop_ipv4.hop_LIH
102 #define Hop4Addr hop_u.hop_ipv4.hop_ipaddr
103 
104 #define Opt_Share_mask 0x00000018
105 #define Opt_Distinct 0x00000008
106 #define Opt_Shared 0x00000010
107 
108 #define Opt_SndSel_mask 0x00000007
109 #define Opt_Wildcard 0x00000001
110 #define Opt_Explicit 0x00000002
111 
112 #define Style_is_Wildcard(p) (((p)&Opt_SndSel_mask)==Opt_Wildcard)
113 #define Style_is_Shared(p) (((p)&Opt_Share_mask)==Opt_Shared)
114 
115 #define STYLE_WF Opt_Shared + Opt_Wildcard
116 #define STYLE_FF Opt_Distinct + Opt_Explicit
117 #define STYLE_SE Opt_Shared + Opt_Explicit
118 
119 #define ctype_STYLE 1
120 
121   typedef struct {
122     RsvpObjHdr style_header;
123     ULONG style_word;
124   } RESV_STYLE;
125 
126 #define ctype_FILTER_SPEC_ipv4 1
127 #define ctype_FILTER_SPEC_ipv4GPI 4
128 
129   typedef struct {
130     IN_ADDR filt_ipaddr;
131     USHORT filt_unused;
132     USHORT filt_port;
133   } Filter_Spec_IPv4;
134 
135   typedef struct {
136     IN_ADDR filt_ipaddr;
137     ULONG filt_gpi;
138   } Filter_Spec_IPv4GPI;
139 
140   typedef struct {
141     RsvpObjHdr filt_header;
142     union {
143       Filter_Spec_IPv4 filt_ipv4;
144       Filter_Spec_IPv4GPI filt_ipv4gpi;
145     } filt_u;
146   } FILTER_SPEC;
147 
148 #define FilterSrcaddr filt_u.filt_ipv4.filt_ipaddr
149 #define FilterSrcport filt_u.filt_ipv4.filt_port
150 
151 #define ctype_SENDER_TEMPLATE_ipv4 1
152 #define ctype_SENDER_TEMPLATE_ipv4GPI 4
153 
154   typedef FILTER_SPEC SENDER_TEMPLATE;
155 
156 #define ctype_SCOPE_list_ipv4 1
157 
158   typedef struct {
159     IN_ADDR scopl_ipaddr[1];
160   } Scope_list_ipv4;
161 
162   typedef struct {
163     RsvpObjHdr scopl_header;
164     union {
165       Scope_list_ipv4 scopl_ipv4;
166     } scope_u;
167   } RSVP_SCOPE;
168 
169 #define Scope4Addr scope_u.scopl_ipv4.scopl_ipaddr
170 #define ScopeCnt(scp) ((ObjLength(scp)-sizeof(RsvpObjHdr))/sizeof(struct in_addr))
171 #define ScopeLen(cnt) (cnt*sizeof(struct in_addr)+sizeof(RsvpObjHdr))
172 
173 #define ctype_ERROR_SPEC_ipv4 1
174 
175 #define ERROR_SPECF_InPlace 0x01
176 #define ERROR_SPECF_NotGuilty 0x02
177 
178 #define ERR_FORWARD_OK 0x8000
179 #define Error_Usage(x) (((x)>>12)&3)
180 #define ERR_Usage_globl 0x00
181 #define ERR_Usage_local 0x10
182 #define ERR_Usage_serv 0x11
183 #define ERR_global_mask 0x0fff
184 
185   typedef struct {
186     struct in_addr errs_errnode;
187     u_char errs_flags;
188     UCHAR errs_code;
189     USHORT errs_value;
190   } Error_Spec_IPv4;
191 
192   typedef struct {
193     RsvpObjHdr errs_header;
194     union {
195       Error_Spec_IPv4 errs_ipv4;
196     } errs_u;
197   } ERROR_SPEC;
198 
199 #define errspec4_enode errs_u.errs_ipv4.errs_errnode
200 #define errspec4_code errs_u.errs_ipv4.errs_code
201 #define errspec4_value errs_u.errs_ipv4.errs_value
202 #define errspec4_flags errs_u.errs_ipv4.errs_flags
203 
204 #define ctype_POLICY_DATA 1
205 
206   typedef struct {
207     RsvpObjHdr PolicyObjHdr;
208     USHORT usPeOffset;
209     USHORT usReserved;
210   } POLICY_DATA;
211 
212 #define PD_HDR_LEN sizeof(POLICY_DATA)
213 
214   typedef struct {
215     USHORT usPeLength;
216     USHORT usPeType;
217     UCHAR ucPeData[4];
218   } POLICY_ELEMENT;
219 
220 #define PE_HDR_LEN (2 *sizeof(USHORT))
221 
222 #define GENERAL_INFO 1
223 #define GUARANTEED_SERV 2
224 #define PREDICTIVE_SERV 3
225 #define CONTROLLED_DELAY_SERV 4
226 #define CONTROLLED_LOAD_SERV 5
227 #define QUALITATIVE_SERV 6
228 
229   enum int_serv_wkp {
230     IS_WKP_HOP_CNT = 4,IS_WKP_PATH_BW = 6,IS_WKP_MIN_LATENCY = 8,IS_WKP_COMPOSED_MTU = 10,IS_WKP_TB_TSPEC = 127,IS_WKP_Q_TSPEC = 128
231   };
232 
233   typedef struct {
234     UCHAR ismh_version;
235     UCHAR ismh_unused;
236     USHORT ismh_len32b;
237   } IntServMainHdr;
238 
239 #define INTSERV_VERS_MASK 0xf0
240 #define INTSERV_VERSION0 0
241 #define Intserv_Version(x) (((x)&INTSERV_VERS_MASK)>>4)
242 #define Intserv_Version_OK(x) (((x)->ismh_version&INTSERV_VERS_MASK)== INTSERV_VERSION0)
243 #define Intserv_Obj_size(x) (((IntServMainHdr *)(x))->ismh_len32b *4 + sizeof(IntServMainHdr) + sizeof(RsvpObjHdr))
244 
245 #define ISSH_BREAK_BIT 0x80
246 
247   typedef struct {
248     UCHAR issh_service;
249     UCHAR issh_flags;
250     USHORT issh_len32b;
251   } IntServServiceHdr;
252 
253 #define Issh_len32b(p) ((p)->issh_len32b)
254 
255 #define ISPH_FLG_INV 0x80
256 
257   typedef struct {
258     UCHAR isph_parm_num;
259     UCHAR isph_flags;
260     USHORT isph_len32b;
261   } IntServParmHdr;
262 
263 #define Next_Main_Hdr(p) (IntServMainHdr *)((ULONG *)(p)+1+(p)->ismh_len32b)
264 #define Next_Serv_Hdr(p) (IntServServiceHdr *)((ULONG *)(p)+1+(p)->issh_len32b)
265 #define Next_Parm_Hdr(p) (IntServParmHdr *)((ULONG *)(p)+1+(p)->isph_len32b)
266 
267   typedef struct {
268     FLOAT TB_Tspec_r;
269     FLOAT TB_Tspec_b;
270     FLOAT TB_Tspec_p;
271     ULONG TB_Tspec_m;
272     ULONG TB_Tspec_M;
273   } GenTspecParms;
274 
275   typedef struct {
276     IntServServiceHdr gen_Tspec_serv_hdr;
277     IntServParmHdr gen_Tspec_parm_hdr;
278     GenTspecParms gen_Tspec_parms;
279   } GenTspec;
280 
281 #define gtspec_r gen_Tspec_parms.TB_Tspec_r
282 #define gtspec_b gen_Tspec_parms.TB_Tspec_b
283 #define gtspec_m gen_Tspec_parms.TB_Tspec_m
284 #define gtspec_M gen_Tspec_parms.TB_Tspec_M
285 #define gtspec_p gen_Tspec_parms.TB_Tspec_p
286 #define gtspec_parmno gen_Tspec_parm_hdr.isph_parm_num
287 #define gtspec_flags gen_Tspec_parm_hdr.isph_flags
288 #define gtspec_len (sizeof(GenTspec) - sizeof(IntServServiceHdr))
289 
290   typedef struct {
291     ULONG TB_Tspec_M;
292   } QualTspecParms;
293 
294   typedef struct {
295     IntServServiceHdr qual_Tspec_serv_hdr;
296     IntServParmHdr qual_Tspec_parm_hdr;
297     QualTspecParms qual_Tspec_parms;
298   } QualTspec;
299 
300   typedef struct {
301     IntServServiceHdr Q_spec_serv_hdr;
302     IntServParmHdr Q_spec_parm_hdr;
303     QualTspecParms Q_spec_parms;
304   } QualAppFlowSpec;
305 
306 #define QAspec_M Q_spec_parms.TB_Tspec_M
307 
308   typedef struct {
309     IntServMainHdr st_mh;
310     union {
311       GenTspec gen_stspec;
312       QualTspec qual_stspec;
313     } tspec_u;
314   } IntServTspecBody;
315 
316 #define ctype_SENDER_TSPEC 2
317 
318   typedef struct {
319     RsvpObjHdr stspec_header;
320     IntServTspecBody stspec_body;
321   } SENDER_TSPEC;
322 
323   typedef struct {
324     IntServServiceHdr CL_spec_serv_hdr;
325     IntServParmHdr CL_spec_parm_hdr;
326     GenTspecParms CL_spec_parms;
327   } CtrlLoadFlowspec;
328 
329 #define CLspec_r CL_spec_parms.TB_Tspec_r
330 #define CLspec_b CL_spec_parms.TB_Tspec_b
331 #define CLspec_p CL_spec_parms.TB_Tspec_p
332 #define CLspec_m CL_spec_parms.TB_Tspec_m
333 #define CLspec_M CL_spec_parms.TB_Tspec_M
334 #define CLspec_parmno CL_spec_parm_hdr.isph_parm_num
335 #define CLspec_flags CL_spec_parm_hdr.isph_flags
336 #define CLspec_len32b CL_spec_parm_hdr.isph_len32b
337 #define CLspec_len (sizeof(CtrlLoadFlowspec) - sizeof(IntServServiceHdr))
338 
339   enum {
340     IS_GUAR_RSPEC = 130,GUAR_ADSPARM_C = 131,GUAR_ADSPARM_D = 132,GUAR_ADSPARM_Ctot = 133,GUAR_ADSPARM_Dtot = 134,GUAR_ADSPARM_Csum = 135,
341     GUAR_ADSPARM_Dsum = 136
342   };
343 
344   typedef struct {
345     FLOAT Guar_R;
346     ULONG Guar_S;
347   } GuarRspec;
348 
349   typedef struct {
350     IntServServiceHdr Guar_serv_hdr;
351     IntServParmHdr Guar_Tspec_hdr;
352     GenTspecParms Guar_Tspec_parms;
353     IntServParmHdr Guar_Rspec_hdr;
354     GuarRspec Guar_Rspec;
355   } GuarFlowSpec;
356 
357 #define Gspec_r Guar_Tspec_parms.TB_Tspec_r
358 #define Gspec_b Guar_Tspec_parms.TB_Tspec_b
359 #define Gspec_p Guar_Tspec_parms.TB_Tspec_p
360 #define Gspec_m Guar_Tspec_parms.TB_Tspec_m
361 #define Gspec_M Guar_Tspec_parms.TB_Tspec_M
362 #define Gspec_R Guar_Rspec.Guar_R
363 #define Gspec_S Guar_Rspec.Guar_S
364 #define Gspec_T_parmno Guar_Tspec_hdr.isph_parm_num
365 #define Gspec_T_flags Guar_Tspec_hdr.isph_flags
366 #define Gspec_R_parmno Guar_Rspec_hdr.isph_parm_num
367 #define Gspec_R_flags Guar_Rspec_hdr.isph_flags
368 #define Gspec_len (sizeof(GuarFlowSpec) - sizeof(IntServServiceHdr))
369 
370   typedef struct {
371     IntServMainHdr spec_mh;
372     union {
373       CtrlLoadFlowspec CL_spec;
374       GuarFlowSpec G_spec;
375       QualAppFlowSpec Q_spec;
376     } spec_u;
377   } IntServFlowSpec;
378 
379 #define ISmh_len32b spec_mh.ismh_len32b
380 #define ISmh_version spec_mh.ismh_version
381 #define ISmh_unused spec_mh.ismh_unused
382 
383 #define ctype_FLOWSPEC_Intserv0 2
384 
385   typedef struct {
386     RsvpObjHdr flow_header;
387     IntServFlowSpec flow_body;
388   } IS_FLOWSPEC;
389 
390   typedef struct flow_desc {
391     union {
392       SENDER_TSPEC *stspec;
393       IS_FLOWSPEC *isflow;
394     } u1;
395     union {
396       SENDER_TEMPLATE *stemp;
397       FILTER_SPEC *fspec;
398     } u2;
399   } FLOW_DESC;
400 
401 #define FdSenderTspec u1.stspec
402 #define FdIsFlowSpec u1.isflow
403 
404 #define FdSenderTemplate u2.stemp
405 #define FdFilterSpec u2.fspec
406 
407 #define ctype_ADSPEC_INTSERV 2
408 
409   typedef struct {
410     IntServServiceHdr Gads_serv_hdr;
411     IntServParmHdr Gads_Ctot_hdr;
412     ULONG Gads_Ctot;
413     IntServParmHdr Gads_Dtot_hdr;
414     ULONG Gads_Dtot;
415     IntServParmHdr Gads_Csum_hdr;
416     ULONG Gads_Csum;
417     IntServParmHdr Gads_Dsum_hdr;
418     ULONG Gads_Dsum;
419   } Gads_parms_t;
420 
421   typedef struct {
422     IntServServiceHdr gen_parm_hdr;
423     IntServParmHdr gen_parm_hopcnt_hdr;
424     ULONG gen_parm_hopcnt;
425     IntServParmHdr gen_parm_pathbw_hdr;
426     FLOAT gen_parm_path_bw;
427     IntServParmHdr gen_parm_minlat_hdr;
428     ULONG gen_parm_min_latency;
429     IntServParmHdr gen_parm_compmtu_hdr;
430     ULONG gen_parm_composed_MTU;
431   } GenAdspecParams;
432 
433   typedef struct {
434     IntServMainHdr adspec_mh;
435     GenAdspecParams adspec_genparms;
436   } IS_ADSPEC_BODY;
437 
438 #define GEN_ADSPEC_LEN (sizeof(Object_header) + sizeof(IS_adsbody_t))
439 
440   typedef struct {
441     RsvpObjHdr adspec_header;
442     IS_ADSPEC_BODY adspec_body;
443   } ADSPEC;
444 
445 #define RSVP_PATH 1
446 #define RSVP_RESV 2
447 #define RSVP_PATH_ERR 3
448 #define RSVP_RESV_ERR 4
449 #define RSVP_PATH_TEAR 5
450 #define RSVP_RESV_TEAR 6
451 
452 #define RSVP_Err_NONE 0
453 #define RSVP_Erv_Nonev 0
454 
455 #define RSVP_Err_ADMISSION 1
456 
457 #define RSVP_Erv_Other 0
458 #define RSVP_Erv_DelayBnd 1
459 #define RSVP_Erv_Bandwidth 2
460 #define RSVP_Erv_MTU 3
461 
462 #define RSVP_Erv_Flow_Rate 0x8001
463 #define RSVP_Erv_Bucket_szie 0x8002
464 #define RSVP_Erv_Peak_Rate 0x8003
465 #define RSVP_Erv_Min_Policied_size 0x8004
466 
467 #define RSVP_Err_POLICY 2
468 
469 #define POLICY_ERRV_NO_MORE_INFO 1
470 #define POLICY_ERRV_UNSUPPORTED_CREDENTIAL_TYPE 2
471 #define POLICY_ERRV_INSUFFICIENT_PRIVILEGES 3
472 #define POLICY_ERRV_EXPIRED_CREDENTIALS 4
473 #define POLICY_ERRV_IDENTITY_CHANGED 5
474 
475 #define POLICY_ERRV_UNKNOWN 0
476 
477 #define POLICY_ERRV_GLOBAL_DEF_FLOW_COUNT 1
478 #define POLICY_ERRV_GLOBAL_GRP_FLOW_COUNT 2
479 #define POLICY_ERRV_GLOBAL_USER_FLOW_COUNT 3
480 #define POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_COUNT 4
481 #define POLICY_ERRV_SUBNET_DEF_FLOW_COUNT 5
482 #define POLICY_ERRV_SUBNET_GRP_FLOW_COUNT 6
483 #define POLICY_ERRV_SUBNET_USER_FLOW_COUNT 7
484 #define POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_COUNT 8
485 
486 #define POLICY_ERRV_GLOBAL_DEF_FLOW_DURATION 9
487 #define POLICY_ERRV_GLOBAL_GRP_FLOW_DURATION 10
488 #define POLICY_ERRV_GLOBAL_USER_FLOW_DURATION 11
489 #define POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_DURATION 12
490 #define POLICY_ERRV_SUBNET_DEF_FLOW_DURATION 13
491 #define POLICY_ERRV_SUBNET_GRP_FLOW_DURATION 14
492 #define POLICY_ERRV_SUBNET_USER_FLOW_DURATION 15
493 #define POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_DURATION 16
494 
495 #define POLICY_ERRV_GLOBAL_DEF_FLOW_RATE 17
496 #define POLICY_ERRV_GLOBAL_GRP_FLOW_RATE 18
497 #define POLICY_ERRV_GLOBAL_USER_FLOW_RATE 19
498 #define POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_RATE 20
499 #define POLICY_ERRV_SUBNET_DEF_FLOW_RATE 21
500 #define POLICY_ERRV_SUBNET_GRP_FLOW_RATE 22
501 #define POLICY_ERRV_SUBNET_USER_FLOW_RATE 23
502 #define POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_RATE 24
503 
504 #define POLICY_ERRV_GLOBAL_DEF_PEAK_RATE 25
505 #define POLICY_ERRV_GLOBAL_GRP_PEAK_RATE 26
506 #define POLICY_ERRV_GLOBAL_USER_PEAK_RATE 27
507 #define POLICY_ERRV_GLOBAL_UNAUTH_USER_PEAK_RATE 28
508 #define POLICY_ERRV_SUBNET_DEF_PEAK_RATE 29
509 #define POLICY_ERRV_SUBNET_GRP_PEAK_RATE 30
510 #define POLICY_ERRV_SUBNET_USER_PEAK_RATE 31
511 #define POLICY_ERRV_SUBNET_UNAUTH_USER_PEAK_RATE 32
512 
513 #define POLICY_ERRV_GLOBAL_DEF_SUM_FLOW_RATE 33
514 #define POLICY_ERRV_GLOBAL_GRP_SUM_FLOW_RATE 34
515 #define POLICY_ERRV_GLOBAL_USER_SUM_FLOW_RATE 35
516 #define POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_FLOW_RATE 36
517 #define POLICY_ERRV_SUBNET_DEF_SUM_FLOW_RATE 37
518 #define POLICY_ERRV_SUBNET_GRP_SUM_FLOW_RATE 38
519 #define POLICY_ERRV_SUBNET_USER_SUM_FLOW_RATE 39
520 #define POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_FLOW_RATE 40
521 
522 #define POLICY_ERRV_GLOBAL_DEF_SUM_PEAK_RATE 41
523 #define POLICY_ERRV_GLOBAL_GRP_SUM_PEAK_RATE 42
524 #define POLICY_ERRV_GLOBAL_USER_SUM_PEAK_RATE 43
525 #define POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_PEAK_RATE 44
526 #define POLICY_ERRV_SUBNET_DEF_SUM_PEAK_RATE 45
527 #define POLICY_ERRV_SUBNET_GRP_SUM_PEAK_RATE 46
528 #define POLICY_ERRV_SUBNET_USER_SUM_PEAK_RATE 47
529 #define POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_PEAK_RATE 48
530 
531 #define POLICY_ERRV_UNKNOWN_USER 49
532 #define POLICY_ERRV_NO_PRIVILEGES 50
533 #define POLICY_ERRV_EXPIRED_USER_TOKEN 51
534 #define POLICY_ERRV_NO_RESOURCES 52
535 #define POLICY_ERRV_PRE_EMPTED 53
536 #define POLICY_ERRV_USER_CHANGED 54
537 #define POLICY_ERRV_NO_ACCEPTS 55
538 #define POLICY_ERRV_NO_MEMORY 56
539 #define POLICY_ERRV_CRAZY_FLOWSPEC 57
540 
541 #define RSVP_Err_NO_PATH 3
542 #define RSVP_Err_NO_SENDER 4
543 #define RSVP_Err_BAD_STYLE 5
544 #define RSVP_Err_UNKNOWN_STYLE 6
545 #define RSVP_Err_BAD_DSTPORT 7
546 #define RSVP_Err_BAD_SNDPORT 8
547 #define RSVP_Err_AMBIG_FILTER 9
548 #define RSVP_Err_PREEMPTED 12
549 #define RSVP_Err_UNKN_OBJ_CLASS 13
550 #define RSVP_Err_UNKNOWN_CTYPE 14
551 #define RSVP_Err_API_ERROR 20
552 #define RSVP_Err_TC_ERROR 21
553 
554 #define RSVP_Erv_Conflict_Serv 01
555 #define RSVP_Erv_No_Serv 02
556 #define RSVP_Erv_Crazy_Flowspec 03
557 #define RSVP_Erv_Crazy_Tspec 04
558 
559 #define RSVP_Err_TC_SYS_ERROR 22
560 
561 #define RSVP_Err_RSVP_SYS_ERROR 23
562 
563 #define RSVP_Erv_MEMORY 1
564 #define RSVP_Erv_API 2
565 
566 #define LPM_PE_USER_IDENTITY 2
567 #define LPM_PE_APP_IDENTITY 3
568 
569 #define ERROR_NO_MORE_INFO 1
570 #define UNSUPPORTED_CREDENTIAL_TYPE 2
571 #define INSUFFICIENT_PRIVILEGES 3
572 #define EXPIRED_CREDENTIAL 4
573 #define IDENTITY_CHANGED 5
574 
575   typedef struct {
576     USHORT usIdErrLength;
577     UCHAR ucAType;
578     UCHAR ucSubType;
579     USHORT usReserved;
580     USHORT usIdErrorValue;
581     UCHAR ucIdErrData[4];
582   } ID_ERROR_OBJECT;
583 
584 #define ID_ERR_OBJ_HDR_LEN (sizeof(ID_ERROR_OBJECT) - 4 *sizeof(UCHAR))
585 
586   DECLARE_HANDLE(LPM_HANDLE);
587   DECLARE_HANDLE(RHANDLE);
588 
589   typedef ULONG LPV;
590   typedef USHORT PETYPE;
591 
592 #define LPM_OK 0
593 
594   typedef int MSG_TYPE;
595 
596   typedef struct rsvpmsgobjs {
597     MSG_TYPE RsvpMsgType;
598     RSVP_SESSION *pRsvpSession;
599     RSVP_HOP *pRsvpFromHop;
600     RSVP_HOP *pRsvpToHop;
601     RESV_STYLE *pResvStyle;
602     RSVP_SCOPE *pRsvpScope;
603     int FlowDescCount;
604     FLOW_DESC *pFlowDescs;
605     int PdObjectCount;
606     POLICY_DATA **ppPdObjects;
607     ERROR_SPEC *pErrorSpec;
608     ADSPEC *pAdspec;
609   } RSVP_MSG_OBJS;
610 
611   typedef void *(WINAPI *PALLOCMEM)(DWORD Size);
612   typedef void (WINAPI *PFREEMEM)(void *pv);
613 
614   typedef struct policy_decision {
615     LPV lpvResult;
616     WORD wPolicyErrCode;
617     WORD wPolicyErrValue;
618   } POLICY_DECISION;
619 
620   typedef ULONG *(CALLBACK *CBADMITRESULT)(LPM_HANDLE LpmHandle,RHANDLE RequestHandle,ULONG ulPcmActionFlags,int LpmError,int PolicyDecisionsCount,POLICY_DECISION *pPolicyDecisions);
621   typedef ULONG *(CALLBACK *CBGETRSVPOBJECTS)(LPM_HANDLE LpmHandle,RHANDLE RequestHandle,int LpmError,int RsvpObjectsCount,RsvpObjHdr **ppRsvpObjects);
622 
623 #define INV_LPM_HANDLE 1
624 #define LPM_TIME_OUT 2
625 #define INV_REQ_HANDLE 3
626 #define DUP_RESULTS 4
627 #define INV_RESULTS 5
628 
629   typedef struct lpminitinfo {
630     DWORD PcmVersionNumber;
631     DWORD ResultTimeLimit;
632     int ConfiguredLpmCount;
633     PALLOCMEM AllocMemory;
634     PFREEMEM FreeMemory;
635     CBADMITRESULT PcmAdmitResultCallback;
636     CBGETRSVPOBJECTS GetRsvpObjectsCallback;
637   } LPM_INIT_INFO;
638 
639 #define LPM_PE_ALL_TYPES 0
640 #define LPM_API_VERSION_1 1
641 
642 #define PCM_VERSION_1 1
643 
644   ULONG WINAPI LPM_Initialize(LPM_HANDLE LpmHandle,LPM_INIT_INFO *pLpmInitInfo,DWORD *pLpmVersionNumber,PETYPE *pSupportedPeType,VOID *Reserved);
645   ULONG WINAPI LPM_Deinitialize(LPM_HANDLE LpmHandle);
646 
647 #define LPV_RESERVED 0
648 #define LPV_MIN_PRIORITY 1
649 #define LPV_MAX_PRIORITY 0xFF00
650 #define LPV_DROP_MSG 0xFFFD
651 #define LPV_DONT_CARE 0xFFFE
652 #define LPV_REJECT 0xFFFF
653 
654 #define FORCE_IMMEDIATE_REFRESH 1
655 
656 #define LPM_RESULT_READY 0
657 #define LPM_RESULT_DEFER 1
658 
659   ULONG WINAPI LPM_AdmitRsvpMsg(RHANDLE PcmReqHandle,RSVP_HOP *pRecvdIntf,RSVP_MSG_OBJS *pRsvpMsgObjs,int RcvdRsvpMsgLength,UCHAR *RcvdRsvpMsg,ULONG *pulPcmActionFlags,POLICY_DECISION *pPolicyDecisions,void *Reserved);
660   ULONG WINAPI LPM_GetRsvpObjects(RHANDLE PcmReqHandle,ULONG MaxPdSize,RSVP_HOP *SendingIntfAddr,RSVP_MSG_OBJS *pRsvpMsgObjs,int *pRsvpObjectsCount,RsvpObjHdr ***pppRsvpObjects,void *Reserved);
661 
662 #define RCVD_PATH_TEAR 1
663 #define RCVD_RESV_TEAR 2
664 #define ADM_CTRL_FAILED 3
665 #define STATE_TIMEOUT 4
666 #define FLOW_DURATION 5
667 
668   VOID WINAPI LPM_DeleteState(RSVP_HOP *pRcvdIfAddr,MSG_TYPE RsvpMsgType,RSVP_SESSION *pRsvpSession,RSVP_HOP *pRsvpFromHop,RESV_STYLE *pResvStyle,int FilterSpecCount,FILTER_SPEC **ppFilterSpecList,int TearDownReason);
669 
670   typedef struct lpmiptable {
671     ULONG ulIfIndex;
672     ULONG MediaType;
673     IN_ADDR IfIpAddr;
674     IN_ADDR IfNetMask;
675   } LPMIPTABLE;
676 
677   WINBOOL WINAPI LPM_IpAddressTable (ULONG cIpAddrTable,LPMIPTABLE *pIpAddrTable);
678 
679 #define RESOURCES_ALLOCATED 1
680 #define RESOURCES_MODIFIED 2
681 
682   VOID WINAPI LPM_CommitResv (RSVP_SESSION *RsvpSession,RSVP_HOP *FlowInstalledIntf,RESV_STYLE *RsvpStyle,int FilterSpecCount,FILTER_SPEC **ppFilterSpecList,IS_FLOWSPEC *pMergedFlowSpec,ULONG CommitDecision);
683 
684 #ifdef __cplusplus
685 }
686 #endif
687 #endif
688