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