Mercurial > games > semicongine
diff fuhtark_test/include/winapi/lpmapi.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fuhtark_test/include/winapi/lpmapi.h Wed Nov 26 21:36:48 2025 +0700 @@ -0,0 +1,679 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER 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
