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 #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