/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifndef __LPMAPI_H_
#define __LPMAPI_H_
#ifdef __cplusplus
extern "C" {
#endif
#ifndef CALLBACK
#define CALLBACK __stdcall
#endif
#ifndef WINAPI
#define WINAPI __stdcall
#endif
#ifndef APIENTRY
#define APIENTRY WINAPI
#endif
typedef struct {
USHORT obj_length;
UCHAR obj_class;
UCHAR obj_ctype;
} RsvpObjHdr;
#define ObjLength(x) ((RsvpObjHdr *)x)->obj_length
#define ObjCType(x) ((RsvpObjHdr *)x)->obj_ctype
#define ObjClass(x) ((RsvpObjHdr *)x)->obj_class
#define ObjData(x) ((RsvpObjHdr *)(x)+1)
#define class_NULL 0
#define class_SESSION 1
#define class_SESSION_GROUP 2
#define class_RSVP_HOP 3
#define class_INTEGRITY 4
#define class_TIME_VALUES 5
#define class_ERROR_SPEC 6
#define class_SCOPE 7
#define class_STYLE 8
#define class_FLOWSPEC 9
#define class_IS_FLOWSPEC 9
#define class_FILTER_SPEC 10
#define class_SENDER_TEMPLATE 11
#define class_SENDER_TSPEC 12
#define class_ADSPEC 13
#define class_POLICY_DATA 14
#define class_CONFIRM 15
#define class_MAX 15
#define ctype_SESSION_ipv4 1
#define ctype_SESSION_ipv4GPI 3
#define SESSFLG_E_Police 0x01
typedef struct {
IN_ADDR sess_destaddr;
UCHAR sess_protid;
UCHAR sess_flags;
USHORT sess_destport;
} Session_IPv4;
typedef struct {
RsvpObjHdr sess_header;
union {
Session_IPv4 sess_ipv4;
} sess_u;
} RSVP_SESSION;
#define Sess4Addr sess_u.sess_ipv4.sess_destaddr
#define Sess4Port sess_u.sess_ipv4.sess_destport
#define Sess4Protocol sess_u.sess_ipv4.sess_protid
#define Sess4Flags sess_u.sess_ipv4.sess_flags
#define ctype_RSVP_HOP_ipv4 1
typedef struct {
IN_ADDR hop_ipaddr;
ULONG hop_LIH;
} Rsvp_Hop_IPv4;
typedef struct {
RsvpObjHdr hop_header;
union {
Rsvp_Hop_IPv4 hop_ipv4;
} hop_u;
} RSVP_HOP;
#define Hop4LIH hop_u.hop_ipv4.hop_LIH
#define Hop4Addr hop_u.hop_ipv4.hop_ipaddr
#define Opt_Share_mask 0x00000018
#define Opt_Distinct 0x00000008
#define Opt_Shared 0x00000010
#define Opt_SndSel_mask 0x00000007
#define Opt_Wildcard 0x00000001
#define Opt_Explicit 0x00000002
#define Style_is_Wildcard(p) (((p)&Opt_SndSel_mask)==Opt_Wildcard)
#define Style_is_Shared(p) (((p)&Opt_Share_mask)==Opt_Shared)
#define STYLE_WF Opt_Shared + Opt_Wildcard
#define STYLE_FF Opt_Distinct + Opt_Explicit
#define STYLE_SE Opt_Shared + Opt_Explicit
#define ctype_STYLE 1
typedef struct {
RsvpObjHdr style_header;
ULONG style_word;
} RESV_STYLE;
#define ctype_FILTER_SPEC_ipv4 1
#define ctype_FILTER_SPEC_ipv4GPI 4
typedef struct {
IN_ADDR filt_ipaddr;
USHORT filt_unused;
USHORT filt_port;
} Filter_Spec_IPv4;
typedef struct {
IN_ADDR filt_ipaddr;
ULONG filt_gpi;
} Filter_Spec_IPv4GPI;
typedef struct {
RsvpObjHdr filt_header;
union {
Filter_Spec_IPv4 filt_ipv4;
Filter_Spec_IPv4GPI filt_ipv4gpi;
} filt_u;
} FILTER_SPEC;
#define FilterSrcaddr filt_u.filt_ipv4.filt_ipaddr
#define FilterSrcport filt_u.filt_ipv4.filt_port
#define ctype_SENDER_TEMPLATE_ipv4 1
#define ctype_SENDER_TEMPLATE_ipv4GPI 4
typedef FILTER_SPEC SENDER_TEMPLATE;
#define ctype_SCOPE_list_ipv4 1
typedef struct {
IN_ADDR scopl_ipaddr[1];
} Scope_list_ipv4;
typedef struct {
RsvpObjHdr scopl_header;
union {
Scope_list_ipv4 scopl_ipv4;
} scope_u;
} RSVP_SCOPE;
#define Scope4Addr scope_u.scopl_ipv4.scopl_ipaddr
#define ScopeCnt(scp) ((ObjLength(scp)-sizeof(RsvpObjHdr))/sizeof(struct in_addr))
#define ScopeLen(cnt) (cnt*sizeof(struct in_addr)+sizeof(RsvpObjHdr))
#define ctype_ERROR_SPEC_ipv4 1
#define ERROR_SPECF_InPlace 0x01
#define ERROR_SPECF_NotGuilty 0x02
#define ERR_FORWARD_OK 0x8000
#define Error_Usage(x) (((x)>>12)&3)
#define ERR_Usage_globl 0x00
#define ERR_Usage_local 0x10
#define ERR_Usage_serv 0x11
#define ERR_global_mask 0x0fff
typedef struct {
struct in_addr errs_errnode;
u_char errs_flags;
UCHAR errs_code;
USHORT errs_value;
} Error_Spec_IPv4;
typedef struct {
RsvpObjHdr errs_header;
union {
Error_Spec_IPv4 errs_ipv4;
} errs_u;
} ERROR_SPEC;
#define errspec4_enode errs_u.errs_ipv4.errs_errnode
#define errspec4_code errs_u.errs_ipv4.errs_code
#define errspec4_value errs_u.errs_ipv4.errs_value
#define errspec4_flags errs_u.errs_ipv4.errs_flags
#define ctype_POLICY_DATA 1
typedef struct {
RsvpObjHdr PolicyObjHdr;
USHORT usPeOffset;
USHORT usReserved;
} POLICY_DATA;
#define PD_HDR_LEN sizeof(POLICY_DATA)
typedef struct {
USHORT usPeLength;
USHORT usPeType;
UCHAR ucPeData[4];
} POLICY_ELEMENT;
#define PE_HDR_LEN (2 *sizeof(USHORT))
#define GENERAL_INFO 1
#define GUARANTEED_SERV 2
#define PREDICTIVE_SERV 3
#define CONTROLLED_DELAY_SERV 4
#define CONTROLLED_LOAD_SERV 5
#define QUALITATIVE_SERV 6
enum int_serv_wkp {
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
};
typedef struct {
UCHAR ismh_version;
UCHAR ismh_unused;
USHORT ismh_len32b;
} IntServMainHdr;
#define INTSERV_VERS_MASK 0xf0
#define INTSERV_VERSION0 0
#define Intserv_Version(x) (((x)&INTSERV_VERS_MASK)>>4)
#define Intserv_Version_OK(x) (((x)->ismh_version&INTSERV_VERS_MASK)== INTSERV_VERSION0)
#define Intserv_Obj_size(x) (((IntServMainHdr *)(x))->ismh_len32b *4 + sizeof(IntServMainHdr) + sizeof(RsvpObjHdr))
#define ISSH_BREAK_BIT 0x80
typedef struct {
UCHAR issh_service;
UCHAR issh_flags;
USHORT issh_len32b;
} IntServServiceHdr;
#define Issh_len32b(p) ((p)->issh_len32b)
#define ISPH_FLG_INV 0x80
typedef struct {
UCHAR isph_parm_num;
UCHAR isph_flags;
USHORT isph_len32b;
} IntServParmHdr;
#define Next_Main_Hdr(p) (IntServMainHdr *)((ULONG *)(p)+1+(p)->ismh_len32b)
#define Next_Serv_Hdr(p) (IntServServiceHdr *)((ULONG *)(p)+1+(p)->issh_len32b)
#define Next_Parm_Hdr(p) (IntServParmHdr *)((ULONG *)(p)+1+(p)->isph_len32b)
typedef struct {
FLOAT TB_Tspec_r;
FLOAT TB_Tspec_b;
FLOAT TB_Tspec_p;
ULONG TB_Tspec_m;
ULONG TB_Tspec_M;
} GenTspecParms;
typedef struct {
IntServServiceHdr gen_Tspec_serv_hdr;
IntServParmHdr gen_Tspec_parm_hdr;
GenTspecParms gen_Tspec_parms;
} GenTspec;
#define gtspec_r gen_Tspec_parms.TB_Tspec_r
#define gtspec_b gen_Tspec_parms.TB_Tspec_b
#define gtspec_m gen_Tspec_parms.TB_Tspec_m
#define gtspec_M gen_Tspec_parms.TB_Tspec_M
#define gtspec_p gen_Tspec_parms.TB_Tspec_p
#define gtspec_parmno gen_Tspec_parm_hdr.isph_parm_num
#define gtspec_flags gen_Tspec_parm_hdr.isph_flags
#define gtspec_len (sizeof(GenTspec) - sizeof(IntServServiceHdr))
typedef struct {
ULONG TB_Tspec_M;
} QualTspecParms;
typedef struct {
IntServServiceHdr qual_Tspec_serv_hdr;
IntServParmHdr qual_Tspec_parm_hdr;
QualTspecParms qual_Tspec_parms;
} QualTspec;
typedef struct {
IntServServiceHdr Q_spec_serv_hdr;
IntServParmHdr Q_spec_parm_hdr;
QualTspecParms Q_spec_parms;
} QualAppFlowSpec;
#define QAspec_M Q_spec_parms.TB_Tspec_M
typedef struct {
IntServMainHdr st_mh;
union {
GenTspec gen_stspec;
QualTspec qual_stspec;
} tspec_u;
} IntServTspecBody;
#define ctype_SENDER_TSPEC 2
typedef struct {
RsvpObjHdr stspec_header;
IntServTspecBody stspec_body;
} SENDER_TSPEC;
typedef struct {
IntServServiceHdr CL_spec_serv_hdr;
IntServParmHdr CL_spec_parm_hdr;
GenTspecParms CL_spec_parms;
} CtrlLoadFlowspec;
#define CLspec_r CL_spec_parms.TB_Tspec_r
#define CLspec_b CL_spec_parms.TB_Tspec_b
#define CLspec_p CL_spec_parms.TB_Tspec_p
#define CLspec_m CL_spec_parms.TB_Tspec_m
#define CLspec_M CL_spec_parms.TB_Tspec_M
#define CLspec_parmno CL_spec_parm_hdr.isph_parm_num
#define CLspec_flags CL_spec_parm_hdr.isph_flags
#define CLspec_len32b CL_spec_parm_hdr.isph_len32b
#define CLspec_len (sizeof(CtrlLoadFlowspec) - sizeof(IntServServiceHdr))
enum {
IS_GUAR_RSPEC = 130,GUAR_ADSPARM_C = 131,GUAR_ADSPARM_D = 132,GUAR_ADSPARM_Ctot = 133,GUAR_ADSPARM_Dtot = 134,GUAR_ADSPARM_Csum = 135,
GUAR_ADSPARM_Dsum = 136
};
typedef struct {
FLOAT Guar_R;
ULONG Guar_S;
} GuarRspec;
typedef struct {
IntServServiceHdr Guar_serv_hdr;
IntServParmHdr Guar_Tspec_hdr;
GenTspecParms Guar_Tspec_parms;
IntServParmHdr Guar_Rspec_hdr;
GuarRspec Guar_Rspec;
} GuarFlowSpec;
#define Gspec_r Guar_Tspec_parms.TB_Tspec_r
#define Gspec_b Guar_Tspec_parms.TB_Tspec_b
#define Gspec_p Guar_Tspec_parms.TB_Tspec_p
#define Gspec_m Guar_Tspec_parms.TB_Tspec_m
#define Gspec_M Guar_Tspec_parms.TB_Tspec_M
#define Gspec_R Guar_Rspec.Guar_R
#define Gspec_S Guar_Rspec.Guar_S
#define Gspec_T_parmno Guar_Tspec_hdr.isph_parm_num
#define Gspec_T_flags Guar_Tspec_hdr.isph_flags
#define Gspec_R_parmno Guar_Rspec_hdr.isph_parm_num
#define Gspec_R_flags Guar_Rspec_hdr.isph_flags
#define Gspec_len (sizeof(GuarFlowSpec) - sizeof(IntServServiceHdr))
typedef struct {
IntServMainHdr spec_mh;
union {
CtrlLoadFlowspec CL_spec;
GuarFlowSpec G_spec;
QualAppFlowSpec Q_spec;
} spec_u;
} IntServFlowSpec;
#define ISmh_len32b spec_mh.ismh_len32b
#define ISmh_version spec_mh.ismh_version
#define ISmh_unused spec_mh.ismh_unused
#define ctype_FLOWSPEC_Intserv0 2
typedef struct {
RsvpObjHdr flow_header;
IntServFlowSpec flow_body;
} IS_FLOWSPEC;
typedef struct flow_desc {
union {
SENDER_TSPEC *stspec;
IS_FLOWSPEC *isflow;
} u1;
union {
SENDER_TEMPLATE *stemp;
FILTER_SPEC *fspec;
} u2;
} FLOW_DESC;
#define FdSenderTspec u1.stspec
#define FdIsFlowSpec u1.isflow
#define FdSenderTemplate u2.stemp
#define FdFilterSpec u2.fspec
#define ctype_ADSPEC_INTSERV 2
typedef struct {
IntServServiceHdr Gads_serv_hdr;
IntServParmHdr Gads_Ctot_hdr;
ULONG Gads_Ctot;
IntServParmHdr Gads_Dtot_hdr;
ULONG Gads_Dtot;
IntServParmHdr Gads_Csum_hdr;
ULONG Gads_Csum;
IntServParmHdr Gads_Dsum_hdr;
ULONG Gads_Dsum;
} Gads_parms_t;
typedef struct {
IntServServiceHdr gen_parm_hdr;
IntServParmHdr gen_parm_hopcnt_hdr;
ULONG gen_parm_hopcnt;
IntServParmHdr gen_parm_pathbw_hdr;
FLOAT gen_parm_path_bw;
IntServParmHdr gen_parm_minlat_hdr;
ULONG gen_parm_min_latency;
IntServParmHdr gen_parm_compmtu_hdr;
ULONG gen_parm_composed_MTU;
} GenAdspecParams;
typedef struct {
IntServMainHdr adspec_mh;
GenAdspecParams adspec_genparms;
} IS_ADSPEC_BODY;
#define GEN_ADSPEC_LEN (sizeof(Object_header) + sizeof(IS_adsbody_t))
typedef struct {
RsvpObjHdr adspec_header;
IS_ADSPEC_BODY adspec_body;
} ADSPEC;
#define RSVP_PATH 1
#define RSVP_RESV 2
#define RSVP_PATH_ERR 3
#define RSVP_RESV_ERR 4
#define RSVP_PATH_TEAR 5
#define RSVP_RESV_TEAR 6
#define RSVP_Err_NONE 0
#define RSVP_Erv_Nonev 0
#define RSVP_Err_ADMISSION 1
#define RSVP_Erv_Other 0
#define RSVP_Erv_DelayBnd 1
#define RSVP_Erv_Bandwidth 2
#define RSVP_Erv_MTU 3
#define RSVP_Erv_Flow_Rate 0x8001
#define RSVP_Erv_Bucket_szie 0x8002
#define RSVP_Erv_Peak_Rate 0x8003
#define RSVP_Erv_Min_Policied_size 0x8004
#define RSVP_Err_POLICY 2
#define POLICY_ERRV_NO_MORE_INFO 1
#define POLICY_ERRV_UNSUPPORTED_CREDENTIAL_TYPE 2
#define POLICY_ERRV_INSUFFICIENT_PRIVILEGES 3
#define POLICY_ERRV_EXPIRED_CREDENTIALS 4
#define POLICY_ERRV_IDENTITY_CHANGED 5
#define POLICY_ERRV_UNKNOWN 0
#define POLICY_ERRV_GLOBAL_DEF_FLOW_COUNT 1
#define POLICY_ERRV_GLOBAL_GRP_FLOW_COUNT 2
#define POLICY_ERRV_GLOBAL_USER_FLOW_COUNT 3
#define POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_COUNT 4
#define POLICY_ERRV_SUBNET_DEF_FLOW_COUNT 5
#define POLICY_ERRV_SUBNET_GRP_FLOW_COUNT 6
#define POLICY_ERRV_SUBNET_USER_FLOW_COUNT 7
#define POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_COUNT 8
#define POLICY_ERRV_GLOBAL_DEF_FLOW_DURATION 9
#define POLICY_ERRV_GLOBAL_GRP_FLOW_DURATION 10
#define POLICY_ERRV_GLOBAL_USER_FLOW_DURATION 11
#define POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_DURATION 12
#define POLICY_ERRV_SUBNET_DEF_FLOW_DURATION 13
#define POLICY_ERRV_SUBNET_GRP_FLOW_DURATION 14
#define POLICY_ERRV_SUBNET_USER_FLOW_DURATION 15
#define POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_DURATION 16
#define POLICY_ERRV_GLOBAL_DEF_FLOW_RATE 17
#define POLICY_ERRV_GLOBAL_GRP_FLOW_RATE 18
#define POLICY_ERRV_GLOBAL_USER_FLOW_RATE 19
#define POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_RATE 20
#define POLICY_ERRV_SUBNET_DEF_FLOW_RATE 21
#define POLICY_ERRV_SUBNET_GRP_FLOW_RATE 22
#define POLICY_ERRV_SUBNET_USER_FLOW_RATE 23
#define POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_RATE 24
#define POLICY_ERRV_GLOBAL_DEF_PEAK_RATE 25
#define POLICY_ERRV_GLOBAL_GRP_PEAK_RATE 26
#define POLICY_ERRV_GLOBAL_USER_PEAK_RATE 27
#define POLICY_ERRV_GLOBAL_UNAUTH_USER_PEAK_RATE 28
#define POLICY_ERRV_SUBNET_DEF_PEAK_RATE 29
#define POLICY_ERRV_SUBNET_GRP_PEAK_RATE 30
#define POLICY_ERRV_SUBNET_USER_PEAK_RATE 31
#define POLICY_ERRV_SUBNET_UNAUTH_USER_PEAK_RATE 32
#define POLICY_ERRV_GLOBAL_DEF_SUM_FLOW_RATE 33
#define POLICY_ERRV_GLOBAL_GRP_SUM_FLOW_RATE 34
#define POLICY_ERRV_GLOBAL_USER_SUM_FLOW_RATE 35
#define POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_FLOW_RATE 36
#define POLICY_ERRV_SUBNET_DEF_SUM_FLOW_RATE 37
#define POLICY_ERRV_SUBNET_GRP_SUM_FLOW_RATE 38
#define POLICY_ERRV_SUBNET_USER_SUM_FLOW_RATE 39
#define POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_FLOW_RATE 40
#define POLICY_ERRV_GLOBAL_DEF_SUM_PEAK_RATE 41
#define POLICY_ERRV_GLOBAL_GRP_SUM_PEAK_RATE 42
#define POLICY_ERRV_GLOBAL_USER_SUM_PEAK_RATE 43
#define POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_PEAK_RATE 44
#define POLICY_ERRV_SUBNET_DEF_SUM_PEAK_RATE 45
#define POLICY_ERRV_SUBNET_GRP_SUM_PEAK_RATE 46
#define POLICY_ERRV_SUBNET_USER_SUM_PEAK_RATE 47
#define POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_PEAK_RATE 48
#define POLICY_ERRV_UNKNOWN_USER 49
#define POLICY_ERRV_NO_PRIVILEGES 50
#define POLICY_ERRV_EXPIRED_USER_TOKEN 51
#define POLICY_ERRV_NO_RESOURCES 52
#define POLICY_ERRV_PRE_EMPTED 53
#define POLICY_ERRV_USER_CHANGED 54
#define POLICY_ERRV_NO_ACCEPTS 55
#define POLICY_ERRV_NO_MEMORY 56
#define POLICY_ERRV_CRAZY_FLOWSPEC 57
#define RSVP_Err_NO_PATH 3
#define RSVP_Err_NO_SENDER 4
#define RSVP_Err_BAD_STYLE 5
#define RSVP_Err_UNKNOWN_STYLE 6
#define RSVP_Err_BAD_DSTPORT 7
#define RSVP_Err_BAD_SNDPORT 8
#define RSVP_Err_AMBIG_FILTER 9
#define RSVP_Err_PREEMPTED 12
#define RSVP_Err_UNKN_OBJ_CLASS 13
#define RSVP_Err_UNKNOWN_CTYPE 14
#define RSVP_Err_API_ERROR 20
#define RSVP_Err_TC_ERROR 21
#define RSVP_Erv_Conflict_Serv 01
#define RSVP_Erv_No_Serv 02
#define RSVP_Erv_Crazy_Flowspec 03
#define RSVP_Erv_Crazy_Tspec 04
#define RSVP_Err_TC_SYS_ERROR 22
#define RSVP_Err_RSVP_SYS_ERROR 23
#define RSVP_Erv_MEMORY 1
#define RSVP_Erv_API 2
#define LPM_PE_USER_IDENTITY 2
#define LPM_PE_APP_IDENTITY 3
#define ERROR_NO_MORE_INFO 1
#define UNSUPPORTED_CREDENTIAL_TYPE 2
#define INSUFFICIENT_PRIVILEGES 3
#define EXPIRED_CREDENTIAL 4
#define IDENTITY_CHANGED 5
typedef struct {
USHORT usIdErrLength;
UCHAR ucAType;
UCHAR ucSubType;
USHORT usReserved;
USHORT usIdErrorValue;
UCHAR ucIdErrData[4];
} ID_ERROR_OBJECT;
#define ID_ERR_OBJ_HDR_LEN (sizeof(ID_ERROR_OBJECT) - 4 *sizeof(UCHAR))
DECLARE_HANDLE(LPM_HANDLE);
DECLARE_HANDLE(RHANDLE);
typedef ULONG LPV;
typedef USHORT PETYPE;
#define LPM_OK 0
typedef int MSG_TYPE;
typedef struct rsvpmsgobjs {
MSG_TYPE RsvpMsgType;
RSVP_SESSION *pRsvpSession;
RSVP_HOP *pRsvpFromHop;
RSVP_HOP *pRsvpToHop;
RESV_STYLE *pResvStyle;
RSVP_SCOPE *pRsvpScope;
int FlowDescCount;
FLOW_DESC *pFlowDescs;
int PdObjectCount;
POLICY_DATA **ppPdObjects;
ERROR_SPEC *pErrorSpec;
ADSPEC *pAdspec;
} RSVP_MSG_OBJS;
typedef void *(WINAPI *PALLOCMEM)(DWORD Size);
typedef void (WINAPI *PFREEMEM)(void *pv);
typedef struct policy_decision {
LPV lpvResult;
WORD wPolicyErrCode;
WORD wPolicyErrValue;
} POLICY_DECISION;
typedef ULONG *(CALLBACK *CBADMITRESULT)(LPM_HANDLE LpmHandle,RHANDLE RequestHandle,ULONG ulPcmActionFlags,int LpmError,int PolicyDecisionsCount,POLICY_DECISION *pPolicyDecisions);
typedef ULONG *(CALLBACK *CBGETRSVPOBJECTS)(LPM_HANDLE LpmHandle,RHANDLE RequestHandle,int LpmError,int RsvpObjectsCount,RsvpObjHdr **ppRsvpObjects);
#define INV_LPM_HANDLE 1
#define LPM_TIME_OUT 2
#define INV_REQ_HANDLE 3
#define DUP_RESULTS 4
#define INV_RESULTS 5
typedef struct lpminitinfo {
DWORD PcmVersionNumber;
DWORD ResultTimeLimit;
int ConfiguredLpmCount;
PALLOCMEM AllocMemory;
PFREEMEM FreeMemory;
CBADMITRESULT PcmAdmitResultCallback;
CBGETRSVPOBJECTS GetRsvpObjectsCallback;
} LPM_INIT_INFO;
#define LPM_PE_ALL_TYPES 0
#define LPM_API_VERSION_1 1
#define PCM_VERSION_1 1
ULONG WINAPI LPM_Initialize(LPM_HANDLE LpmHandle,LPM_INIT_INFO *pLpmInitInfo,DWORD *pLpmVersionNumber,PETYPE *pSupportedPeType,VOID *Reserved);
ULONG WINAPI LPM_Deinitialize(LPM_HANDLE LpmHandle);
#define LPV_RESERVED 0
#define LPV_MIN_PRIORITY 1
#define LPV_MAX_PRIORITY 0xFF00
#define LPV_DROP_MSG 0xFFFD
#define LPV_DONT_CARE 0xFFFE
#define LPV_REJECT 0xFFFF
#define FORCE_IMMEDIATE_REFRESH 1
#define LPM_RESULT_READY 0
#define LPM_RESULT_DEFER 1
ULONG WINAPI LPM_AdmitRsvpMsg(RHANDLE PcmReqHandle,RSVP_HOP *pRecvdIntf,RSVP_MSG_OBJS *pRsvpMsgObjs,int RcvdRsvpMsgLength,UCHAR *RcvdRsvpMsg,ULONG *pulPcmActionFlags,POLICY_DECISION *pPolicyDecisions,void *Reserved);
ULONG WINAPI LPM_GetRsvpObjects(RHANDLE PcmReqHandle,ULONG MaxPdSize,RSVP_HOP *SendingIntfAddr,RSVP_MSG_OBJS *pRsvpMsgObjs,int *pRsvpObjectsCount,RsvpObjHdr ***pppRsvpObjects,void *Reserved);
#define RCVD_PATH_TEAR 1
#define RCVD_RESV_TEAR 2
#define ADM_CTRL_FAILED 3
#define STATE_TIMEOUT 4
#define FLOW_DURATION 5
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);
typedef struct lpmiptable {
ULONG ulIfIndex;
ULONG MediaType;
IN_ADDR IfIpAddr;
IN_ADDR IfNetMask;
} LPMIPTABLE;
WINBOOL WINAPI LPM_IpAddressTable (ULONG cIpAddrTable,LPMIPTABLE *pIpAddrTable);
#define RESOURCES_ALLOCATED 1
#define RESOURCES_MODIFIED 2
VOID WINAPI LPM_CommitResv (RSVP_SESSION *RsvpSession,RSVP_HOP *FlowInstalledIntf,RESV_STYLE *RsvpStyle,int FilterSpecCount,FILTER_SPEC **ppFilterSpecList,IS_FLOWSPEC *pMergedFlowSpec,ULONG CommitDecision);
#ifdef __cplusplus
}
#endif
#endif