diff options
Diffstat (limited to 'packages/extra/winunits/jwalpmapi.pas')
-rw-r--r-- | packages/extra/winunits/jwalpmapi.pas | 3314 |
1 files changed, 1657 insertions, 1657 deletions
diff --git a/packages/extra/winunits/jwalpmapi.pas b/packages/extra/winunits/jwalpmapi.pas index 8f55d39277..6aee5e5904 100644 --- a/packages/extra/winunits/jwalpmapi.pas +++ b/packages/extra/winunits/jwalpmapi.pas @@ -1,1657 +1,1657 @@ -{******************************************************************************}
-{ }
-{ Winsock2 RSVP/LPM API interface Unit for Object Pascal }
-{ }
-{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
-{ Corporation. All Rights Reserved. }
-{ }
-{ The original file is: lpmapi.h, released June 2000. The original Pascal }
-{ code is: LpmApi.pas, released December 2000. The initial developer of the }
-{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
-{ }
-{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
-{ Marcel van Brakel. All Rights Reserved. }
-{ }
-{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
-{ }
-{ You may retrieve the latest version of this file at the Project JEDI }
-{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
-{ }
-{ The contents of this file are used with permission, subject to the Mozilla }
-{ Public License Version 1.1 (the "License"); you may not use this file except }
-{ in compliance with the License. You may obtain a copy of the License at }
-{ http://www.mozilla.org/MPL/MPL-1.1.html }
-{ }
-{ Software distributed under the License is distributed on an "AS IS" basis, }
-{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
-{ the specific language governing rights and limitations under the License. }
-{ }
-{ Alternatively, the contents of this file may be used under the terms of the }
-{ GNU Lesser General Public License (the "LGPL License"), in which case the }
-{ provisions of the LGPL License are applicable instead of those above. }
-{ If you wish to allow use of your version of this file only under the terms }
-{ of the LGPL License and not to allow others to use your version of this file }
-{ under the MPL, indicate your decision by deleting the provisions above and }
-{ replace them with the notice and other provisions required by the LGPL }
-{ License. If you do not delete the provisions above, a recipient may use }
-{ your version of this file under either the MPL or the LGPL License. }
-{ }
-{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
-{ }
-{******************************************************************************}
-
-// $Id: jwalpmapi.pas,v 1.1 2005/04/04 07:56:10 marco Exp $
-
-unit JwaLpmApi;
-
-{$WEAKPACKAGEUNIT}
-
-{$HPPEMIT ''}
-{$HPPEMIT '#include "lpmapi.h"'}
-{$HPPEMIT ''}
-
-{$I jediapilib.inc}
-
-interface
-
-uses
- JwaWinSock2, JwaWinType;
-
-type
- FLOAT = Single;
- {$NODEFINE FLOAT}
-
-(****************************************************************************
-
- RSVPD -- ReSerVation Protocol Daemon
-
- USC Information Sciences Institute
- Marina del Rey, California
-
- Original Version: Shai Herzog, Nov. 1993.
- Current Version: Steven Berson & Bob Braden, may 1996.
-
- Copyright (c) 1996 by the University of Southern California
- All rights reserved.
-
- Permission to use, copy, modify, and distribute this software and its
- documentation in source and binary forms for any purpose and without
- fee is hereby granted, provided that both the above copyright notice
- and this permission notice appear in all copies, and that any
- documentation, advertising materials, and other materials related to
- such distribution and use acknowledge that the software was developed
- in part by the University of Southern California, Information
- Sciences Institute. The name of the University may not be used to
- endorse or promote products derived from this software without
- specific prior written permission.
-
- THE UNIVERSITY OF SOUTHERN CALIFORNIA makes no representations about
- the suitability of this software for any purpose. THIS SOFTWARE IS
- PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
- Other copyrights might apply to parts of this software and are so
- noted when applicable.
-
-********************************************************************)
-
-(*
- * Standard format of an RSVP object header
- *)
-
-type
- RsvpObjHdr = record
- obj_length: USHORT; (* Length in bytes *)
- obj_class: UCHAR; (* Class (values defined below) *)
- obj_ctype: UCHAR; (* C-Type (values defined below) *)
- end;
- {$EXTERNALSYM RsvpObjHdr}
- TRsvpObjHdr = RsvpObjHdr;
- PRsvpObjHdr = ^RsvpObjHdr;
- PPRsvpObjHdr = ^PRsvpObjHdr;
-
-function ObjLength(const x: TRsvpObjHdr): USHORT;
-{$EXTERNALSYM ObjLength}
-function ObjCType(const x: TRsvpObjHdr): UCHAR;
-{$EXTERNALSYM ObjCType}
-function ObjClass(const x: TRsvpObjHdr): UCHAR;
-{$EXTERNALSYM ObjClass}
-function ObjData(const x: TRsvpObjHdr): Pointer;
-{$EXTERNALSYM ObjData}
-
-(*
- * Define object classes: Class-Num values
- *)
-
-const
- class_NULL = 0;
- {$EXTERNALSYM class_NULL}
- class_SESSION = 1;
- {$EXTERNALSYM class_SESSION}
- class_SESSION_GROUP = 2;
- {$EXTERNALSYM class_SESSION_GROUP}
- class_RSVP_HOP = 3;
- {$EXTERNALSYM class_RSVP_HOP}
- class_INTEGRITY = 4;
- {$EXTERNALSYM class_INTEGRITY}
- class_TIME_VALUES = 5;
- {$EXTERNALSYM class_TIME_VALUES}
- class_ERROR_SPEC = 6;
- {$EXTERNALSYM class_ERROR_SPEC}
- class_SCOPE = 7;
- {$EXTERNALSYM class_SCOPE}
- class_STYLE = 8;
- {$EXTERNALSYM class_STYLE}
- class_FLOWSPEC = 9; // these two are the same
- {$EXTERNALSYM class_FLOWSPEC}
- class_IS_FLOWSPEC = 9; // since we added IS in front of the name
- {$EXTERNALSYM class_IS_FLOWSPEC}
- class_FILTER_SPEC = 10;
- {$EXTERNALSYM class_FILTER_SPEC}
- class_SENDER_TEMPLATE = 11;
- {$EXTERNALSYM class_SENDER_TEMPLATE}
- class_SENDER_TSPEC = 12;
- {$EXTERNALSYM class_SENDER_TSPEC}
- class_ADSPEC = 13;
- {$EXTERNALSYM class_ADSPEC}
- class_POLICY_DATA = 14;
- {$EXTERNALSYM class_POLICY_DATA}
- class_CONFIRM = 15;
- {$EXTERNALSYM class_CONFIRM}
- class_MAX = 15;
- {$EXTERNALSYM class_MAX}
-
-(*
- * RSVP SESSION object
- *)
-
- ctype_SESSION_ipv4 = 1;
- {$EXTERNALSYM ctype_SESSION_ipv4}
- ctype_SESSION_ipv4GPI = 3 (* IPSEC: Generalized Port Id *);
- {$EXTERNALSYM ctype_SESSION_ipv4GPI}
-
- SESSFLG_E_Police = $01 (* E_Police: Entry policing flag*);
- {$EXTERNALSYM SESSFLG_E_Police}
-
-type
- Session_IPv4 = record
- sess_destaddr: IN_ADDR; // DestAddress
- sess_protid: UCHAR; // Protocol Id
- sess_flags: UCHAR; // Use the flags defined above
- sess_destport: USHORT; // DestPort
- end;
- {$EXTERNALSYM Session_IPv4}
- TSessionIPv4 = Session_IPv4;
- PSessionIPv4 = ^Session_IPv4;
-
-(* GPI versions have virtual dest port instead of dest port; this
- * changes the interpretation but not the format, so we do not
- * define new structs for GPI.
- *)
-
- RSVP_SESSION = record
- sess_header: RsvpObjHdr;
- case Integer of
- 0: (sess_ipv4: Session_IPv4);
- end;
- {$EXTERNALSYM RSVP_SESSION}
- TRsvpSession = RSVP_SESSION;
- PRsvpSession = ^RSVP_SESSION;
-
-// Useful defines to access components of SESSION obect
-
-//#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
-
-(*
- * RSVP HOP object
- *)
-
-const
- ctype_RSVP_HOP_ipv4 = 1;
- {$EXTERNALSYM ctype_RSVP_HOP_ipv4}
-
-type
- Rsvp_Hop_IPv4 = record
- hop_ipaddr: IN_ADDR; // Next/Previous Hop Address
- hop_LIH: ULONG; // Logical Interface Handle
- end;
- {$EXTERNALSYM Rsvp_Hop_IPv4}
- TRsvpHopIPv4 = Rsvp_Hop_IPv4;
- PRsvpHopIPv4 = ^Rsvp_Hop_IPv4;
-
- RSVP_HOP = record
- hop_header: RsvpObjHdr;
- case Integer of
- 0: (hop_ipv4: Rsvp_Hop_IPv4);
- end;
- {$EXTERNALSYM RSVP_HOP}
- TRsvpHop = RSVP_HOP;
- PRsvpHop = ^RSVP_HOP;
-
-//#define Hop4LIH hop_u.hop_ipv4.hop_LIH
-//#define Hop4Addr hop_u.hop_ipv4.hop_ipaddr
-
-(*
- * RSVP STYLE object
- *)
-
-// Define values for option vector
-
-const
- Opt_Share_mask = $00000018; // 2 bits: Sharing control
- {$EXTERNALSYM Opt_Share_mask}
- Opt_Distinct = $00000008; // Distinct reservations
- {$EXTERNALSYM Opt_Distinct}
- Opt_Shared = $00000010; // Shared reservations
- {$EXTERNALSYM Opt_Shared}
-
- Opt_SndSel_mask = $00000007; // 3 bits: Sender selection
- {$EXTERNALSYM Opt_SndSel_mask}
- Opt_Wildcard = $00000001; // Wildcard scope
- {$EXTERNALSYM Opt_Wildcard}
- Opt_Explicit = $00000002; // Explicit scope
- {$EXTERNALSYM Opt_Explicit}
-
-function Style_is_Wildcard(p: DWORD): Boolean;
-{$EXTERNALSYM Style_is_Wildcard}
-function Style_is_Shared(p: DWORD): Boolean;
-{$EXTERNALSYM Style_is_Shared}
-
-// Define style values
-
-const
- STYLE_WF = Opt_Shared + Opt_Wildcard;
- {$EXTERNALSYM STYLE_WF}
- STYLE_FF = Opt_Distinct + Opt_Explicit;
- {$EXTERNALSYM STYLE_FF}
- STYLE_SE = Opt_Shared + Opt_Explicit;
- {$EXTERNALSYM STYLE_SE}
-
- ctype_STYLE = 1;
- {$EXTERNALSYM ctype_STYLE}
-
-type
- RESV_STYLE = record
- style_header: RsvpObjHdr;
- style_word: ULONG;
- end;
- {$EXTERNALSYM RESV_STYLE}
- TResvStyle = RESV_STYLE;
- PResvStyle = ^RESV_STYLE;
-
-(*
- * RSVP FILTER SPEC object
- *)
-
-const
- ctype_FILTER_SPEC_ipv4 = 1; // IPv4 FILTER_SPEC
- {$EXTERNALSYM ctype_FILTER_SPEC_ipv4}
- ctype_FILTER_SPEC_ipv4GPI = 4; // IPv4/GPI FILTER_SPEC
- {$EXTERNALSYM ctype_FILTER_SPEC_ipv4GPI}
-
-type
- Filter_Spec_IPv4 = record
- filt_ipaddr: IN_ADDR; // IPv4 SrcAddress
- filt_unused: USHORT;
- filt_port: USHORT; // SrcPort
- end;
- {$EXTERNALSYM Filter_Spec_IPv4}
- TFilterSpecIPv4 = Filter_Spec_IPv4;
- PFilterSpecIPv4 = ^Filter_Spec_IPv4;
-
- Filter_Spec_IPv4GPI = record
- filt_ipaddr: IN_ADDR; // IPv4 SrcAddress
- filt_gpi: ULONG; // Generalized Port Id
- end;
- {$EXTERNALSYM Filter_Spec_IPv4GPI}
- TFilterSpecIPv4GPI = Filter_Spec_IPv4GPI;
- PFilterSpecIPv4GPI = ^Filter_Spec_IPv4GPI;
-
- FILTER_SPEC = record
- filt_header: RsvpObjHdr;
- case Integer of
- 0: (filt_ipv4: Filter_Spec_IPv4);
- 1: (filt_ipv4gpi: Filter_Spec_IPv4GPI);
- end;
- {$EXTERNALSYM FILTER_SPEC}
- TFilterSpec = FILTER_SPEC;
- PFilterSpec = ^FILTER_SPEC;
-
-//#define FilterSrcaddr filt_u.filt_ipv4.filt_ipaddr
-//#define FilterSrcport filt_u.filt_ipv4.filt_port
-
-(*
- * RSVP SENDER_TEMPLATE object
- *)
-
-const
- ctype_SENDER_TEMPLATE_ipv4 = 1; // IPv4 SENDER_TEMPLATE
- {$EXTERNALSYM ctype_SENDER_TEMPLATE_ipv4}
- ctype_SENDER_TEMPLATE_ipv4GPI = 4; // IPv4/GPI SENDER_TEMPLATE
- {$EXTERNALSYM ctype_SENDER_TEMPLATE_ipv4GPI}
-
-type
- SENDER_TEMPLATE = FILTER_SPEC; // Identical to FILTER_SPEC
- {$EXTERNALSYM SENDER_TEMPLATE}
- TSenderTemplate = SENDER_TEMPLATE;
- PSenderTemplate = ^SENDER_TEMPLATE;
-
-(*
- * RSVP SCOPE object class
- *)
-
-const
- ctype_SCOPE_list_ipv4 = 1;
- {$EXTERNALSYM ctype_SCOPE_list_ipv4}
-
-type
- Scope_list_ipv4 = record
- scopl_ipaddr: array [0..0] of IN_ADDR; // var-len list of IP sender addrs
- end;
- {$EXTERNALSYM Scope_list_ipv4}
- TScopeListIPv4 = Scope_list_ipv4;
- PScopeListIPv4 = ^Scope_list_ipv4;
-
- RSVP_SCOPE = record
- scopl_header: RsvpObjHdr;
- case Integer of
- 0: (scopl_ipv4: Scope_list_ipv4);
- end;
- {$EXTERNALSYM RSVP_SCOPE}
- TRsvpScope = RSVP_SCOPE;
- PRsvpScope = ^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))
-
-(*
- * ERROR_SPEC object class
- *)
-
-const
- ctype_ERROR_SPEC_ipv4 = 1;
- {$EXTERNALSYM ctype_ERROR_SPEC_ipv4}
-
- ERROR_SPECF_InPlace = $01; (* Left resv in place *)
- {$EXTERNALSYM ERROR_SPECF_InPlace}
- ERROR_SPECF_NotGuilty = $02; (* This rcvr not guilty *)
- {$EXTERNALSYM ERROR_SPECF_NotGuilty}
- ERR_FORWARD_OK = $8000; (* Flag: OK to forward state *)
- {$EXTERNALSYM ERR_FORWARD_OK}
-
-function Error_Usage(x: DWORD): DWORD;
-{$EXTERNALSYM Error_Usage}
-
-const
- ERR_Usage_globl = $00; (* Globally-defined sub-code *)
- {$EXTERNALSYM ERR_Usage_globl}
- ERR_Usage_local = $10; (* Locally-defined sub-code *)
- {$EXTERNALSYM ERR_Usage_local}
- ERR_Usage_serv = $11; (* Service-defined sub-code *)
- {$EXTERNALSYM ERR_Usage_serv}
- ERR_global_mask = $0fff; (* Sub-code bits in Error Val *)
- {$EXTERNALSYM ERR_global_mask}
-
-type
- Error_Spec_IPv4 = record
- errs_errnode: in_addr; (* Error Node Address *)
- errs_flags: u_char; (* Flags: *)
- errs_code: UCHAR; (* Error Code (def'd below) *)
- errs_value: USHORT; (* Error Value *)
- end;
- {$EXTERNALSYM Error_Spec_IPv4}
- TErrorSpecIPv4 = Error_Spec_IPv4;
- PErrorSpecIPv4 = ^Error_Spec_IPv4;
-
-type
- ERROR_SPEC = record
- errs_header: RsvpObjHdr;
- case Integer of
- 0: (errs_ipv4: Error_Spec_IPv4);
- end;
- {$EXTERNALSYM ERROR_SPEC}
- TErrorSpec = ERROR_SPEC;
- PErrorSpec = ^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
-
-(*
- * POLICY_DATA object class
- *
- * Contents are Opaque RSVP/SBM
- *)
-
-const
- ctype_POLICY_DATA = 1;
- {$EXTERNALSYM ctype_POLICY_DATA}
-
-type
- POLICY_DATA = record
- PolicyObjHdr: RsvpObjHdr;
- usPeOffset: USHORT; // Offset to the start of Policy Elements from the begining of Policy Data
- usReserved: USHORT;
- end;
- {$EXTERNALSYM POLICY_DATA}
- TPolicyData = POLICY_DATA;
- PPolicyData = ^POLICY_DATA;
-
-const
- PD_HDR_LEN = SizeOf(POLICY_DATA);
- {$EXTERNALSYM PD_HDR_LEN}
-
-type
- POLICY_ELEMENT = record
- usPeLength: USHORT; // Policy Element length
- usPeType: USHORT; // Policy Element type
- ucPeData: array [0..3] of UCHAR; // Just a place holder to the start of Policy Element data
- end;
- {$EXTERNALSYM POLICY_ELEMENT}
- TPolicyElement = POLICY_ELEMENT;
- PPolicyElement = ^POLICY_ELEMENT;
-
-const
- PE_HDR_LEN = 2 * SizeOf(USHORT);
- {$EXTERNALSYM PE_HDR_LEN}
-
-(**************************************************************************
- *
- * Int-Serv Data Structures
- *
- **************************************************************************)
-
-(*
- * Service numbers
- *)
-
-const
- GENERAL_INFO = 1;
- {$EXTERNALSYM GENERAL_INFO}
- GUARANTEED_SERV = 2;
- {$EXTERNALSYM GUARANTEED_SERV}
- PREDICTIVE_SERV = 3;
- {$EXTERNALSYM PREDICTIVE_SERV}
- CONTROLLED_DELAY_SERV = 4;
- {$EXTERNALSYM CONTROLLED_DELAY_SERV}
- CONTROLLED_LOAD_SERV = 5;
- {$EXTERNALSYM CONTROLLED_LOAD_SERV}
- QUALITATIVE_SERV = 6;
- {$EXTERNALSYM QUALITATIVE_SERV}
-
-(*
- * Well-known parameter IDs
- *)
-
-const
- IS_WKP_HOP_CNT = 4;
- {$EXTERNALSYM IS_WKP_HOP_CNT}
- IS_WKP_PATH_BW = 6;
- {$EXTERNALSYM IS_WKP_PATH_BW}
- IS_WKP_MIN_LATENCY = 8;
- {$EXTERNALSYM IS_WKP_MIN_LATENCY}
- IS_WKP_COMPOSED_MTU = 10;
- {$EXTERNALSYM IS_WKP_COMPOSED_MTU}
- IS_WKP_TB_TSPEC = 127; (* Token-bucket TSPEC parm *)
- {$EXTERNALSYM IS_WKP_TB_TSPEC}
- IS_WKP_Q_TSPEC = 128;
- {$EXTERNALSYM IS_WKP_Q_TSPEC}
-
-type
- int_serv_wkp = DWORD;
- {$EXTERNALSYM int_serv_wkp}
- TIntServWkp = int_serv_wkp;
-
-(*
- * Int-serv Main header
- *)
-
- IntServMainHdr = record
- ismh_version: UCHAR; // Version
- ismh_unused: UCHAR;
- ismh_len32b: USHORT; // # 32-bit words excluding this hdr
- end;
- {$EXTERNALSYM IntServMainHdr}
- TIntServMainHdr = IntServMainHdr;
- PIntServMainHdr = ^IntServMainHdr;
-
-const
- INTSERV_VERS_MASK = $f0;
- {$EXTERNALSYM INTSERV_VERS_MASK}
- INTSERV_VERSION0 = 0;
- {$EXTERNALSYM INTSERV_VERSION0}
-
-function Intserv_Version(x: DWORD): DWORD;
-{$EXTERNALSYM Intserv_Version}
-function Intserv_Version_OK(const x: TIntServMainHdr): Boolean;
-{$EXTERNALSYM Intserv_Version_OK}
-
-// Convert ishm_length to equivalent RSVP object size, for checking
-
-function Intserv_Obj_size(const x: TIntServMainHdr): DWORD;
-{$EXTERNALSYM Intserv_Obj_size}
-
-(*
- * Int-serv Service Element Header
- *)
-
-// Flag: Break bit
-
-const
- ISSH_BREAK_BIT = $80;
- {$EXTERNALSYM ISSH_BREAK_BIT}
-
-type
- IntServServiceHdr = record
- issh_service: UCHAR; // Service number
- issh_flags: UCHAR; // Flag byte
- issh_len32b: USHORT; // #32-bit words excluding this hdr
- end;
- {$EXTERNALSYM IntServServiceHdr}
- TIntServServiceHdr = IntServServiceHdr;
- PIntServServiceHdr = ^IntServServiceHdr;
-
-function Issh_len32b(const p: TIntServServiceHdr): USHORT;
-{$EXTERNALSYM Issh_len32b}
-
-(*
- * Int-serv Parameter Element Header
- *)
-
-const
- ISPH_FLG_INV = $80; // Flag: Invalid
- {$EXTERNALSYM ISPH_FLG_INV}
-
-type
- IntServParmHdr = record
- isph_parm_num: UCHAR; // Parameter number
- isph_flags: UCHAR; // Flags
- isph_len32b: USHORT; // #32-bit words excluding this hdr
- end;
- {$EXTERNALSYM IntServParmHdr}
- TIntServParmHdr = IntServParmHdr;
- PIntServParmHdr = ^IntServParmHdr;
-
-{
-function Next_Main_Hdr(const p: TIntServMainHdr): PIntServMainHdr;
-begin
- TODO (IntServMainHdr *)((ULONG *)(p)+1+(p)->ismh_len32b)
-end;
-
-function Next_Serv_Hdr(const p: TIntServMainHdr): ULONG;
-begin
- TODO (IntServServiceHdr *)((ULONG *)(p)+1+(p)->issh_len32b)
-end;
-
-function Next_Parm_Hdr(const p: TIntServParmHdr): ULONG;
-begin
- TODO (IntServParmHdr *)((ULONG *)(p)+1+(p)->isph_len32b)
-end;
-}
-
-(*
- * Generic Tspec Parameters
- *)
-
-type
- GenTspecParms = record
- TB_Tspec_r: FLOAT; // Token bucket rate (B/sec)
- TB_Tspec_b: FLOAT; // Token bucket depth (B)
- TB_Tspec_p: FLOAT; // Peak data rate (B/sec)
- TB_Tspec_m: ULONG; // Min Policed Unit (B)
- TB_Tspec_M_: ULONG; // Max pkt size (B)
- end;
- {$EXTERNALSYM GenTspecParms}
- TGenTspecParms = GenTspecParms;
- PGenTspecParms = ^GenTspecParms;
-
-(*
- * Generic Tspec
- *)
-
- GenTspec = record
- gen_Tspec_serv_hdr: IntServServiceHdr; // (GENERAL_INFO, length)
- gen_Tspec_parm_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC)
- gen_Tspec_parms: GenTspecParms;
- end;
- {$EXTERNALSYM GenTspec}
- TGenTspec = GenTspec;
- PGenTspec = ^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))
-
-(* contents of qualitative tspec *)
-
-type
- QualTspecParms = record
- TB_Tspec_M: ULONG; // Max pkt size (M)
- end;
- {$EXTERNALSYM QualTspecParms}
- TQualTspecParms = QualTspecParms;
- PQualTspecParms = ^QualTspecParms;
-
- QualTspec = record
- qual_Tspec_serv_hdr: IntServServiceHdr; // (QUALITATIVE_SERV, length)
- qual_Tspec_parm_hdr: IntServParmHdr; // (IS_WKP_Q_TSPEC)
- qual_Tspec_parms: QualTspecParms;
- end;
- {$EXTERNALSYM QualTspec}
- TQualTspec = QualTspec;
- PQualTspec = ^QualTspec;
-
- QualAppFlowSpec = record
- Q_spec_serv_hdr: IntServServiceHdr; // (QUALITATIVE_SERV,0,len)
- Q_spec_parm_hdr: IntServParmHdr; // (IS_WKP_Q_TSPEC)
- Q_spec_parms: QualTspecParms; // QUALITATIVE Tspec parameters
- end;
- {$EXTERNALSYM QualAppFlowSpec}
- TQualAppFlowSpec = QualAppFlowSpec;
- PQualAppFlowSpec = ^QualAppFlowSpec;
-
-//#define QAspec_M Q_spec_parms.TB_Tspec_M
-
-(*
- * Contents of int-serv Tspec
- *)
-
- IntServTspecBody = record
- st_mh: IntServMainHdr;
- case Integer of
- 0: (gen_stspec: GenTspec); // Generic Tspec
- 1: (qual_stspec: QualTspec);
- end;
- {$EXTERNALSYM IntServTspecBody}
- TIntServTspecBody = IntServTspecBody;
- PIntServTspecBody = ^IntServTspecBody;
-
-(*
- * SENDER_TSPEC class object
- *)
-
-const
- ctype_SENDER_TSPEC = 2;
- {$EXTERNALSYM ctype_SENDER_TSPEC}
-
-type
- SENDER_TSPEC = record
- stspec_header: RsvpObjHdr;
- stspec_body: IntServTspecBody;
- end;
- {$EXTERNALSYM SENDER_TSPEC}
- TSenderTSpec = SENDER_TSPEC;
- PSenderTSpec = ^SENDER_TSPEC;
-
-(*
- * Controlled-Load Flowspec
- *)
-
- CtrlLoadFlowspec = record
- CL_spec_serv_hdr: IntServServiceHdr; // (CONTROLLED_LOAD_SERV,0,len)
- CL_spec_parm_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC)
- CL_spec_parms: GenTspecParms; // GENERIC Tspec parameters
- end;
- {$EXTERNALSYM CtrlLoadFlowspec}
- TCtrlLoadFlowspec = CtrlLoadFlowspec;
- PCtrlLoadFlowspec = ^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))
-
-(* Service-specific Parameter IDs
- *)
-
-const
- IS_GUAR_RSPEC = 130;
- {$EXTERNALSYM IS_GUAR_RSPEC}
-
- GUAR_ADSPARM_C = 131;
- {$EXTERNALSYM GUAR_ADSPARM_C}
- GUAR_ADSPARM_D = 132;
- {$EXTERNALSYM GUAR_ADSPARM_D}
- GUAR_ADSPARM_Ctot = 133;
- {$EXTERNALSYM GUAR_ADSPARM_Ctot}
- GUAR_ADSPARM_Dtot = 134;
- {$EXTERNALSYM GUAR_ADSPARM_Dtot}
- GUAR_ADSPARM_Csum = 135;
- {$EXTERNALSYM GUAR_ADSPARM_Csum}
- GUAR_ADSPARM_Dsum = 136;
- {$EXTERNALSYM GUAR_ADSPARM_Dsum}
-
-(*
- * Guaranteed Rspec parameters
- *)
-
-type
- GuarRspec = record
- Guar_R: FLOAT; // Guaranteed Rate B/s
- Guar_S: ULONG; // Slack term secs
- end;
- {$EXTERNALSYM GuarRspec}
- TGuarRspec = GuarRspec;
- PGuarRspec = ^GuarRspec;
-
-(*
- * Guaranteed Flowspec
- *)
-
- GuarFlowSpec = record
- Guar_serv_hdr: IntServServiceHdr; // (GUARANTEED, 0, length)
- Guar_Tspec_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC,)
- Guar_Tspec_parms: GenTspecParms; // GENERIC Tspec parms
- Guar_Rspec_hdr: IntServParmHdr; // (IS_GUAR_RSPEC)
- Guar_Rspec: GuarRspec; // Guaranteed rate (B/sec)
- end;
- {$EXTERNALSYM GuarFlowSpec}
- TGuarFlowSpec = GuarFlowSpec;
- PGuarFlowSpec = ^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))
-
-(*
- * Contents of int-serv flowspec
- *)
-
-type
- IntServFlowSpec = record
- spec_mh: IntServMainHdr;
- case Integer of
- 0: (CL_spec: CtrlLoadFlowspec); // Controlled-Load service
- 1: (G_spec: GuarFlowSpec); // Guaranteed service
- 2: (Q_spec: QualAppFlowSpec);
- end;
- {$EXTERNALSYM IntServFlowSpec}
- TIntServFlowSpec = IntServFlowSpec;
- PIntServFlowSpec = ^IntServFlowSpec;
-
-//#define ISmh_len32b spec_mh.ismh_len32b
-//#define ISmh_version spec_mh.ismh_version
-//#define ISmh_unused spec_mh.ismh_unused
-
-(*
- * Int-Serv FLOWSPEC object
- *)
-
-const
- ctype_FLOWSPEC_Intserv0 = 2; // The int-serv flowspec (v.0)
- {$EXTERNALSYM ctype_FLOWSPEC_Intserv0}
-
-type
- IS_FLOWSPEC = record
- flow_header: RsvpObjHdr;
- flow_body: IntServFlowSpec;
- end;
- {$EXTERNALSYM IS_FLOWSPEC}
- TIsFlowSpec = IS_FLOWSPEC;
- PIsFlowSpec = ^IS_FLOWSPEC;
-
-(*
- * FLOW DESCRIPTOR
- *)
-
- FLOW_DESC = record
- u1: record
- case Integer of
- 0: (stspec: ^SENDER_TSPEC);
- 1: (isflow: ^IS_FLOWSPEC);
- end;
- u2: record
- case Integer of
- 0: (stemp: ^SENDER_TEMPLATE);
- 1: (fspec: ^FILTER_SPEC);
- end;
- end;
- {$EXTERNALSYM FLOW_DESC}
- TFlowDesc = FLOW_DESC;
- PFlowDesc = ^FLOW_DESC;
-
-//#define FdSenderTspec u1.stspec
-//#define FdIsFlowSpec u1.isflow
-
-//#define FdSenderTemplate u2.stemp
-//#define FdFilterSpec u2.fspec
-
-(*
- * ADSPEC class object
- *
- * Opaque to RSVP -- Contents defined in rapi_lib.h
- *)
-
-const
- ctype_ADSPEC_INTSERV = 2;
- {$EXTERNALSYM ctype_ADSPEC_INTSERV}
-
-(*
- * Guaranteed service Adspec parameters -- fixed part
- *)
-
-type
- Gads_parms_t = record
- Gads_serv_hdr: IntServServiceHdr; // GUARANTEED, x, len
- Gads_Ctot_hdr: IntServParmHdr; // GUAR_ADSPARM_Ctot
- Gads_Ctot: ULONG;
- Gads_Dtot_hdr: IntServParmHdr; // (GUAR_ADSPARM_Dtot
- Gads_Dtot: ULONG;
- Gads_Csum_hdr: IntServParmHdr; // GUAR_ADSPARM_Csum
- Gads_Csum: ULONG;
- Gads_Dsum_hdr: IntServParmHdr; // GUAR_ADSPARM_Dsum
- Gads_Dsum: ULONG;
- (*
- * May be followed by override general param values
- *)
- end;
- {$EXTERNALSYM Gads_parms_t}
- TGadsParmsT = Gads_parms_t;
- PGadsParmsT = ^Gads_parms_t;
-
-(*
- * General Path Characterization Parameters
- *)
-
- GenAdspecParams = record
- gen_parm_hdr: IntServServiceHdr; // GENERAL_INFO, len
- gen_parm_hopcnt_hdr: IntServParmHdr; // (IS_WKP_HOP_CNT
- gen_parm_hopcnt: ULONG;
- gen_parm_pathbw_hdr: IntServParmHdr; // IS_WKP_PATH_BW
- gen_parm_path_bw: FLOAT;
- gen_parm_minlat_hdr: IntServParmHdr; // IS_WKP_MIN_LATENCY
- gen_parm_min_latency: ULONG;
- gen_parm_compmtu_hdr: IntServParmHdr; // IS_WKP_COMPOSED_MTU
- gen_parm_composed_MTU: ULONG;
- end;
- {$EXTERNALSYM GenAdspecParams}
- TGenAdspecParams = GenAdspecParams;
- PGenAdspecParams = ^GenAdspecParams;
-
-(*
- * Contents of (minimal) int-serv Adspec
- *)
-
- IS_ADSPEC_BODY = record
- adspec_mh: IntServMainHdr; // Main header
- adspec_genparms: GenAdspecParams;// General char parm fragment
- (*
- * Followed by variable-length fragments for some or all
- * services. These can be minimal length fragments.
- *)
- end;
- {$EXTERNALSYM IS_ADSPEC_BODY}
- TIsAdSpecBody = IS_ADSPEC_BODY;
- PIsAdSpecBody = ^IS_ADSPEC_BODY;
-
-//const TODO Unknown Object_Header
-// GEN_ADSPEC_LEN = SizeOf(Object_header) + SizeOf(IS_adsbody_t);
-// {$EXTERNALSYM GEN_ADSPEC_LEN}
-
-type
- ADSPEC = record
- adspec_header: RsvpObjHdr;
- adspec_body: IS_ADSPEC_BODY; (* Defined in rapi_lib.h *)
- end;
- {$EXTERNALSYM ADSPEC}
- TAdSpec = ADSPEC;
- PAdSpec = ^ADSPEC;
-
-// RSVP message types
-
-const
- RSVP_PATH = 1;
- {$EXTERNALSYM RSVP_PATH}
- RSVP_RESV = 2;
- {$EXTERNALSYM RSVP_RESV}
- RSVP_PATH_ERR = 3;
- {$EXTERNALSYM RSVP_PATH_ERR}
- RSVP_RESV_ERR = 4;
- {$EXTERNALSYM RSVP_RESV_ERR}
- RSVP_PATH_TEAR = 5;
- {$EXTERNALSYM RSVP_PATH_TEAR}
- RSVP_RESV_TEAR = 6;
- {$EXTERNALSYM RSVP_RESV_TEAR}
-
-(* RSVP error codes
- *)
-
- RSVP_Err_NONE = 0; (* No error (CONFIRM) *)
- {$EXTERNALSYM RSVP_Err_NONE}
- RSVP_Erv_Nonev = 0; (* No-error Error Value *)
- {$EXTERNALSYM RSVP_Erv_Nonev}
-
-(* Admission Control failure *)
-
- RSVP_Err_ADMISSION = 1;
- {$EXTERNALSYM RSVP_Err_ADMISSION}
-
-(* Globally-defined sub-codes for : Admission Control failure *)
-
- RSVP_Erv_Other = 0; (* Unspecified cause *)
- {$EXTERNALSYM RSVP_Erv_Other}
- RSVP_Erv_DelayBnd = 1; (* Cannot meet delay bound req *)
- {$EXTERNALSYM RSVP_Erv_DelayBnd}
- RSVP_Erv_Bandwidth = 2; (* Insufficient bandwidth *)
- {$EXTERNALSYM RSVP_Erv_Bandwidth}
- RSVP_Erv_MTU = 3; (* MTU in flowspec too large *)
- {$EXTERNALSYM RSVP_Erv_MTU}
-
-// Microsoft specific error values
-
- RSVP_Erv_Flow_Rate = $8001;
- {$EXTERNALSYM RSVP_Erv_Flow_Rate}
- RSVP_Erv_Bucket_szie = $8002;
- {$EXTERNALSYM RSVP_Erv_Bucket_szie}
- RSVP_Erv_Peak_Rate = $8003;
- {$EXTERNALSYM RSVP_Erv_Peak_Rate}
- RSVP_Erv_Min_Policied_size = $8004;
- {$EXTERNALSYM RSVP_Erv_Min_Policied_size}
-
-(* Policy control failure *)
-
- RSVP_Err_POLICY = 2;
- {$EXTERNALSYM RSVP_Err_POLICY}
-
-// Policy error values from Identity draft
-
- POLICY_ERRV_NO_MORE_INFO = 1;
- {$EXTERNALSYM POLICY_ERRV_NO_MORE_INFO}
- POLICY_ERRV_UNSUPPORTED_CREDENTIAL_TYPE = 2;
- {$EXTERNALSYM POLICY_ERRV_UNSUPPORTED_CREDENTIAL_TYPE}
- POLICY_ERRV_INSUFFICIENT_PRIVILEGES = 3;
- {$EXTERNALSYM POLICY_ERRV_INSUFFICIENT_PRIVILEGES}
- POLICY_ERRV_EXPIRED_CREDENTIALS = 4;
- {$EXTERNALSYM POLICY_ERRV_EXPIRED_CREDENTIALS}
- POLICY_ERRV_IDENTITY_CHANGED = 5;
- {$EXTERNALSYM POLICY_ERRV_IDENTITY_CHANGED}
-
-// Microsoft specific policy error values
-
- POLICY_ERRV_UNKNOWN = 0;
- {$EXTERNALSYM POLICY_ERRV_UNKNOWN}
-
- POLICY_ERRV_GLOBAL_DEF_FLOW_COUNT = 1;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_COUNT}
- POLICY_ERRV_GLOBAL_GRP_FLOW_COUNT = 2;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_COUNT}
- POLICY_ERRV_GLOBAL_USER_FLOW_COUNT = 3;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_COUNT}
- POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_COUNT = 4;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_COUNT}
- POLICY_ERRV_SUBNET_DEF_FLOW_COUNT = 5;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_COUNT}
- POLICY_ERRV_SUBNET_GRP_FLOW_COUNT = 6;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_COUNT}
- POLICY_ERRV_SUBNET_USER_FLOW_COUNT = 7;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_COUNT}
- POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_COUNT = 8;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_COUNT}
-
- POLICY_ERRV_GLOBAL_DEF_FLOW_DURATION = 9;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_DURATION}
- POLICY_ERRV_GLOBAL_GRP_FLOW_DURATION = 10;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_DURATION}
- POLICY_ERRV_GLOBAL_USER_FLOW_DURATION = 11;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_DURATION}
- POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_DURATION = 12;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_DURATION}
- POLICY_ERRV_SUBNET_DEF_FLOW_DURATION = 13;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_DURATION}
- POLICY_ERRV_SUBNET_GRP_FLOW_DURATION = 14;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_DURATION}
- POLICY_ERRV_SUBNET_USER_FLOW_DURATION = 15;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_DURATION}
- POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_DURATION = 16;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_DURATION}
-
- POLICY_ERRV_GLOBAL_DEF_FLOW_RATE = 17;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_RATE}
- POLICY_ERRV_GLOBAL_GRP_FLOW_RATE = 18;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_RATE}
- POLICY_ERRV_GLOBAL_USER_FLOW_RATE = 19;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_RATE}
- POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_RATE = 20;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_RATE}
- POLICY_ERRV_SUBNET_DEF_FLOW_RATE = 21;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_RATE}
- POLICY_ERRV_SUBNET_GRP_FLOW_RATE = 22;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_RATE}
- POLICY_ERRV_SUBNET_USER_FLOW_RATE = 23;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_RATE}
- POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_RATE = 24;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_RATE}
-
- POLICY_ERRV_GLOBAL_DEF_PEAK_RATE = 25;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_PEAK_RATE}
- POLICY_ERRV_GLOBAL_GRP_PEAK_RATE = 26;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_PEAK_RATE}
- POLICY_ERRV_GLOBAL_USER_PEAK_RATE = 27;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_PEAK_RATE}
- POLICY_ERRV_GLOBAL_UNAUTH_USER_PEAK_RATE = 28;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_PEAK_RATE}
- POLICY_ERRV_SUBNET_DEF_PEAK_RATE = 29;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_PEAK_RATE}
- POLICY_ERRV_SUBNET_GRP_PEAK_RATE = 30;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_PEAK_RATE}
- POLICY_ERRV_SUBNET_USER_PEAK_RATE = 31;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_PEAK_RATE}
- POLICY_ERRV_SUBNET_UNAUTH_USER_PEAK_RATE = 32;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_PEAK_RATE}
-
- POLICY_ERRV_GLOBAL_DEF_SUM_FLOW_RATE = 33;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_SUM_FLOW_RATE}
- POLICY_ERRV_GLOBAL_GRP_SUM_FLOW_RATE = 34;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_SUM_FLOW_RATE}
- POLICY_ERRV_GLOBAL_USER_SUM_FLOW_RATE = 35;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_SUM_FLOW_RATE}
- POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_FLOW_RATE = 36;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_FLOW_RATE}
- POLICY_ERRV_SUBNET_DEF_SUM_FLOW_RATE = 37;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_SUM_FLOW_RATE}
- POLICY_ERRV_SUBNET_GRP_SUM_FLOW_RATE = 38;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_SUM_FLOW_RATE}
- POLICY_ERRV_SUBNET_USER_SUM_FLOW_RATE = 39;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_SUM_FLOW_RATE}
- POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_FLOW_RATE = 40;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_FLOW_RATE}
-
- POLICY_ERRV_GLOBAL_DEF_SUM_PEAK_RATE = 41;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_SUM_PEAK_RATE}
- POLICY_ERRV_GLOBAL_GRP_SUM_PEAK_RATE = 42;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_SUM_PEAK_RATE}
- POLICY_ERRV_GLOBAL_USER_SUM_PEAK_RATE = 43;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_SUM_PEAK_RATE}
- POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_PEAK_RATE = 44;
- {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_PEAK_RATE}
- POLICY_ERRV_SUBNET_DEF_SUM_PEAK_RATE = 45;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_SUM_PEAK_RATE}
- POLICY_ERRV_SUBNET_GRP_SUM_PEAK_RATE = 46;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_SUM_PEAK_RATE}
- POLICY_ERRV_SUBNET_USER_SUM_PEAK_RATE = 47;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_SUM_PEAK_RATE}
- POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_PEAK_RATE = 48;
- {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_PEAK_RATE}
-
- POLICY_ERRV_UNKNOWN_USER = 49;
- {$EXTERNALSYM POLICY_ERRV_UNKNOWN_USER}
- POLICY_ERRV_NO_PRIVILEGES = 50;
- {$EXTERNALSYM POLICY_ERRV_NO_PRIVILEGES}
- POLICY_ERRV_EXPIRED_USER_TOKEN = 51;
- {$EXTERNALSYM POLICY_ERRV_EXPIRED_USER_TOKEN}
- POLICY_ERRV_NO_RESOURCES = 52;
- {$EXTERNALSYM POLICY_ERRV_NO_RESOURCES}
- POLICY_ERRV_PRE_EMPTED = 53;
- {$EXTERNALSYM POLICY_ERRV_PRE_EMPTED}
- POLICY_ERRV_USER_CHANGED = 54;
- {$EXTERNALSYM POLICY_ERRV_USER_CHANGED}
- POLICY_ERRV_NO_ACCEPTS = 55;
- {$EXTERNALSYM POLICY_ERRV_NO_ACCEPTS}
- POLICY_ERRV_NO_MEMORY = 56;
- {$EXTERNALSYM POLICY_ERRV_NO_MEMORY}
- POLICY_ERRV_CRAZY_FLOWSPEC = 57;
- {$EXTERNALSYM POLICY_ERRV_CRAZY_FLOWSPEC}
-
-// Other RSVP defined Error codes
-
- RSVP_Err_NO_PATH = 3; (* No path state for Resv *)
- {$EXTERNALSYM RSVP_Err_NO_PATH}
- RSVP_Err_NO_SENDER = 4; (* No sender info for Resv *)
- {$EXTERNALSYM RSVP_Err_NO_SENDER}
- RSVP_Err_BAD_STYLE = 5; (* Conflicting style *)
- {$EXTERNALSYM RSVP_Err_BAD_STYLE}
- RSVP_Err_UNKNOWN_STYLE = 6; (* Unknown reservation style *)
- {$EXTERNALSYM RSVP_Err_UNKNOWN_STYLE}
- RSVP_Err_BAD_DSTPORT = 7; (* Conflicting DstPort in Sess *)
- {$EXTERNALSYM RSVP_Err_BAD_DSTPORT}
- RSVP_Err_BAD_SNDPORT = 8; (* Conflicting Sender port *)
- {$EXTERNALSYM RSVP_Err_BAD_SNDPORT}
- RSVP_Err_AMBIG_FILTER = 9; (* Ambiguous Filter spec in Resv*)
- {$EXTERNALSYM RSVP_Err_AMBIG_FILTER}
-
- RSVP_Err_PREEMPTED = 12; (* Service Preempted *)
- {$EXTERNALSYM RSVP_Err_PREEMPTED}
-
-(* Unknown object Class-Num *)
-
- RSVP_Err_UNKN_OBJ_CLASS = 13;
- {$EXTERNALSYM RSVP_Err_UNKN_OBJ_CLASS}
-
-(* ErrVal = Class_num, CType *)
-
- (* Unknown object C-Type *)
-
- RSVP_Err_UNKNOWN_CTYPE = 14;
- {$EXTERNALSYM RSVP_Err_UNKNOWN_CTYPE}
-
-(* ErrVal = Class_num, CType *)
-
- RSVP_Err_API_ERROR = 20; (* API client error *)
- {$EXTERNALSYM RSVP_Err_API_ERROR}
-
-(* ErrVal = API error code *)
-
-(* Traffic Control error *)
-
- RSVP_Err_TC_ERROR = 21;
- {$EXTERNALSYM RSVP_Err_TC_ERROR}
-
-(* Globally-defined sub-codes for : Traffic Control errors *)
-
- RSVP_Erv_Conflict_Serv = 01; (* Service Conflict *)
- {$EXTERNALSYM RSVP_Erv_Conflict_Serv}
- RSVP_Erv_No_Serv = 02; (* Unknown Service *)
- {$EXTERNALSYM RSVP_Erv_No_Serv}
- RSVP_Erv_Crazy_Flowspec = 03; (* Unreasonable Flowspec *)
- {$EXTERNALSYM RSVP_Erv_Crazy_Flowspec}
- RSVP_Erv_Crazy_Tspec = 04; (* Unreasonable Tspec *)
- {$EXTERNALSYM RSVP_Erv_Crazy_Tspec}
-
- RSVP_Err_TC_SYS_ERROR = 22; (* Traffic control system error *)
- {$EXTERNALSYM RSVP_Err_TC_SYS_ERROR}
-
-(* ErrVal = kernel error code *)
-
-(* RSVP System error *)
-
- RSVP_Err_RSVP_SYS_ERROR = 23;
- {$EXTERNALSYM RSVP_Err_RSVP_SYS_ERROR}
-
-(* Globally-defined sub-codes for : RSVP system errors *)
-
- RSVP_Erv_MEMORY = 1; (* Out of memory *)
- {$EXTERNALSYM RSVP_Erv_MEMORY}
- RSVP_Erv_API = 2; (* API logic error *)
- {$EXTERNALSYM RSVP_Erv_API}
-
-// Identity Policy elements related defines
-
-// Reseved Identity PE types
-
- LPM_PE_USER_IDENTITY = 2;
- {$EXTERNALSYM LPM_PE_USER_IDENTITY}
- LPM_PE_APP_IDENTITY = 3;
- {$EXTERNALSYM LPM_PE_APP_IDENTITY}
-
-// Defines for Identity error values
-
- ERROR_NO_MORE_INFO = 1;
- {$EXTERNALSYM ERROR_NO_MORE_INFO}
- UNSUPPORTED_CREDENTIAL_TYPE = 2;
- {$EXTERNALSYM UNSUPPORTED_CREDENTIAL_TYPE}
- INSUFFICIENT_PRIVILEGES = 3;
- {$EXTERNALSYM INSUFFICIENT_PRIVILEGES}
- EXPIRED_CREDENTIAL = 4;
- {$EXTERNALSYM EXPIRED_CREDENTIAL}
- IDENTITY_CHANGED = 5;
- {$EXTERNALSYM IDENTITY_CHANGED}
-
-type
- ID_ERROR_OBJECT = record
- usIdErrLength: USHORT;
- ucAType: UCHAR;
- ucSubType: UCHAR;
- usReserved: USHORT;
- usIdErrorValue: USHORT;
- ucIdErrData: array [0..3] of UCHAR;
- end;
- {$EXTERNALSYM ID_ERROR_OBJECT}
- TIdErrorObject = ID_ERROR_OBJECT;
- PIdErrorObject = ^ID_ERROR_OBJECT;
-
-const
- ID_ERR_OBJ_HDR_LEN = SizeOf(ID_ERROR_OBJECT) - 4 * SizeOf(UCHAR);
- {$EXTERNALSYM ID_ERR_OBJ_HDR_LEN}
-
-(*
-
- LPM API specific definitions
-
-*)
-
-(**************************************
-
- LPM_Initialize
-
-***************************************)
-
-type
- LPM_HANDLE = HANDLE;
- {$EXTERNALSYM LPM_HANDLE}
-
- RHANDLE = HANDLE;
- {$EXTERNALSYM RHANDLE}
-
- LPV = ULONG;
- {$EXTERNALSYM LPV}
-
- PETYPE = USHORT;
- {$EXTERNALSYM PETYPE}
-
-const
- LPM_OK = 0;
- {$EXTERNALSYM LPM_OK}
-
-type
- MSG_TYPE = Integer;
- {$EXTERNALSYM MSG_TYPE}
- TMsgType = MSG_TYPE;
-
- rsvpmsgobjs = record
- RsvpMsgType: TMsgType;
- pRsvpSession: PRsvpSession;
- pRsvpFromHop: PRsvpHop;
- pRsvpToHop: PRsvpHop;
- pResvStyle: PResvStyle;
- pRsvpScope: PRsvpScope;
- FlowDescCount: Integer;
- pFlowDescs: PFlowDesc;
- PdObjectCount: Integer;
- ppPdObjects: ^PPolicyData;
- pErrorSpec: PErrorSpec;
- pAdspec: PADSpec;
- end;
- {$EXTERNALSYM rsvpmsgobjs}
- RSVP_MSG_OBJS = rsvpmsgobjs;
- {$EXTERNALSYM RSVP_MSG_OBJS}
- TRsvpMsgObjs = RSVP_MSG_OBJS;
- PRsvpMsgObjs = ^RSVP_MSG_OBJS;
-
- PALLOCMEM = function(Size: DWORD): Pointer; stdcall;
- {$EXTERNALSYM PALLOCMEM}
- TAllocMem = PALLOCMEM;
-
- PFREEMEM = procedure(pv: Pointer); stdcall;
- {$EXTERNALSYM PFREEMEM}
- TFreeMem = PFREEMEM;
-
- policy_decision = record
- lpvResult: LPV; // Use the LPV values from above
- wPolicyErrCode: WORD; // RSVP defined error codes
- wPolicyErrValue: WORD; // RSVP defined error values
- end;
- {$EXTERNALSYM policy_decision}
- TPolicyDecision = policy_decision;
- PPolicyDecision = ^policy_decision;
-
- CBADMITRESULT = function(LpmHandle: LPM_HANDLE; RequestHandle: RHANDLE;
- ulPcmActionFlags: ULONG; LpmError: Integer; PolicyDecisionsCount: Integer;
- pPolicyDecisions: PPolicyDecision): ULONG; stdcall;
- {$EXTERNALSYM CBADMITRESULT}
- TCbAdmitResult = CBADMITRESULT;
-
- CBGETRSVPOBJECTS = function(LpmHandle: LPM_HANDLE; RequestHandle: RHANDLE;
- LpmError: Integer; RsvpObjectsCount: Integer; ppRsvpObjects: PPRsvpObjHdr): ULONG; stdcall;
- {$EXTERNALSYM CBGETRSVPOBJECTS}
- TCbGetRsvpObjects = CBGETRSVPOBJECTS;
-
-// The above 2 call backs can return the following errors
-
-const
- INV_LPM_HANDLE = 1; // Supplied LpmHandle is invalid
- {$EXTERNALSYM INV_LPM_HANDLE}
- LPM_TIME_OUT = 2; // LPM has returned results after the time limit
- {$EXTERNALSYM LPM_TIME_OUT}
- INV_REQ_HANDLE = 3; // Supplied Request handle is invalid
- {$EXTERNALSYM INV_REQ_HANDLE}
- DUP_RESULTS = 4; // LPM has already returned results for this request
- {$EXTERNALSYM DUP_RESULTS}
- INV_RESULTS = 5; // Results supplied are invalid
- {$EXTERNALSYM INV_RESULTS}
-
-type
- lpminitinfo = record
- PcmVersionNumber: DWORD;
- ResultTimeLimit: DWORD;
- ConfiguredLpmCount: Integer;
- AllocMemory: PALLOCMEM;
- FreeMemory: PFREEMEM;
- PcmAdmitResultCallback: CBADMITRESULT;
- GetRsvpObjectsCallback: CBGETRSVPOBJECTS;
- end;
- {$EXTERNALSYM lpminitinfo}
- LPM_INIT_INFO = lpminitinfo;
- {$EXTERNALSYM LPM_INIT_INFO}
- TLpmInitInfo = LPM_INIT_INFO;
- PLpmInitInfo = ^LPM_INIT_INFO;
-
-// Valid PE types
-// XXX ISSUE - Is 0xFFFF a better choice?
-
-const
- LPM_PE_ALL_TYPES = 0;
- {$EXTERNALSYM LPM_PE_ALL_TYPES}
-
-// Current LPM API version number
-
- LPM_API_VERSION_1 = 1;
- {$EXTERNALSYM LPM_API_VERSION_1}
-
-// Current PCM version number
-
- PCM_VERSION_1 = 1;
- {$EXTERNALSYM PCM_VERSION_1}
-
-function LPM_Initialize(LpmHandle: LPM_HANDLE; const pLpmInitInfo: LPM_INIT_INFO;
- var pLpmVersionNumber: DWORD; var pSupportedPeType: PETYPE; Reserved: Pointer): ULONG; stdcall;
-{$EXTERNALSYM LPM_Initialize}
-
-(**************************************
-
- LPM_Deinitialize
-
-***************************************)
-
-function LPM_Deinitialize(LpmHandle: LPM_HANDLE): ULONG; stdcall;
-{$EXTERNALSYM LPM_Deinitialize}
-
-(**************************************
-
- LPM_AdmitRsvpMsg
-
-***************************************)
-
-// Valid LPV - LPM Priority Values
-
-const
- LPV_RESERVED = 0;
- {$EXTERNALSYM LPV_RESERVED}
- LPV_MIN_PRIORITY = 1;
- {$EXTERNALSYM LPV_MIN_PRIORITY}
- LPV_MAX_PRIORITY = $FF00;
- {$EXTERNALSYM LPV_MAX_PRIORITY}
- LPV_DROP_MSG = $FFFD;
- {$EXTERNALSYM LPV_DROP_MSG}
- LPV_DONT_CARE = $FFFE;
- {$EXTERNALSYM LPV_DONT_CARE}
- LPV_REJECT = $FFFF;
- {$EXTERNALSYM LPV_REJECT}
-
-// Valid values for PcmActionFlags
-
- FORCE_IMMEDIATE_REFRESH = 1;
- {$EXTERNALSYM FORCE_IMMEDIATE_REFRESH}
-
-// Function return values for LPM_AdmitResvMsg
-
- LPM_RESULT_READY = 0;
- {$EXTERNALSYM LPM_RESULT_READY}
- LPM_RESULT_DEFER = 1;
- {$EXTERNALSYM LPM_RESULT_DEFER}
-
-function LPM_AdmitRsvpMsg(PcmReqHandle: RHANDLE; const pRecvdIntf: RSVP_HOP;
- const pRsvpMsgObjs: RSVP_MSG_OBJS; RcvdRsvpMsgLength: Integer; RcvdRsvpMsg: PUCHAR;
- var pulPcmActionFlags: ULONG; pPolicyDecisions: PPolicyDecision; Reserved: Pointer): ULONG; stdcall;
-{$EXTERNALSYM LPM_AdmitRsvpMsg}
-
-(**************************************
-
- LPM_GetRsvpObjects
-
-***************************************)
-
-// Function return values are defined in LPM_AdmitResvMsg section
-
-function LPM_GetRsvpObjects(PcmReqHandle: RHANDLE; MaxPdSize: ULONG;
- SendingIntfAddr: PRsvpHop; pRsvpMsgObjs: PRsvpMsgObjs; var pRsvpObjectsCount: Integer;
- var pppRsvpObjects: PRsvpObjHdr; Reserved: Pointer): ULONG; stdcall;
-{$EXTERNALSYM LPM_GetRsvpObjects}
-
-(**************************************
-
- LPM_DeleteState
-
-***************************************)
-
-// TearDown reasons
-
-const
- RCVD_PATH_TEAR = 1;
- {$EXTERNALSYM RCVD_PATH_TEAR}
- RCVD_RESV_TEAR = 2;
- {$EXTERNALSYM RCVD_RESV_TEAR}
- ADM_CTRL_FAILED = 3;
- {$EXTERNALSYM ADM_CTRL_FAILED}
- STATE_TIMEOUT = 4;
- {$EXTERNALSYM STATE_TIMEOUT}
- FLOW_DURATION = 5;
- {$EXTERNALSYM FLOW_DURATION}
-
-procedure LPM_DeleteState(pRcvdIfAddr: PRsvpHop; RsvpMsgType: TMsgType;
- pRsvpSession: PRsvpSession; pRsvpFromHop: PRsvpHop; pResvStyle: PResvStyle;
- FilterSpecCount: Integer; ppFilterSpecList: PFilterSpec; TearDownReason: Integer); stdcall;
-{$EXTERNALSYM LPM_DeleteState}
-
-(**************************************
-
- LPM_IpAddrTable
-
-***************************************)
-
-type
- lpmiptable = record
- ulIfIndex: ULONG; // SNMP index for this interface
- MediaType: ULONG; // As defined in IPIFCONS.H
- IfIpAddr: IN_ADDR; // Interface IP address
- IfNetMask: IN_ADDR; // Interface subnet mask
- end;
- {$EXTERNALSYM lpmiptable}
- TLpmIpTable = lpmiptable;
- PLpmIpTable = ^lpmiptable;
-
-function LPM_IpAddressTable(cIpAddrTable: ULONG; pIpAddrTable: PLpmIpTable): BOOL; stdcall;
-{$EXTERNALSYM LPM_IpAddressTable}
-
-(**************************************
-
- LPM_CommitResv
-
-***************************************)
-
-// CommitDecision values
-
-const
- RESOURCES_ALLOCATED = 1;
- {$EXTERNALSYM RESOURCES_ALLOCATED}
- RESOURCES_MODIFIED = 2;
- {$EXTERNALSYM RESOURCES_MODIFIED}
-
-procedure LPM_CommitResv(RsvpSession: PRsvpSession; FlowInstalledIntf: PRsvpHop;
- RsvpStyle: PResvStyle; FilterSpecCount: Integer; ppFilterSpecList: PFilterSpec;
- pMergedFlowSpec: PIsFlowSpec; CommitDecision: ULONG); stdcall;
-{$EXTERNALSYM LPM_CommitResv}
-
-implementation
-
-const
- lpmlib = 'msidlpm.dll';
-
-function ObjLength(const x: TRsvpObjHdr): USHORT;
-begin
- Result := x.obj_length;
-end;
-
-function ObjCType(const x: TRsvpObjHdr): UCHAR;
-begin
- Result := x.obj_ctype;
-end;
-
-function ObjClass(const x: TRsvpObjHdr): UCHAR;
-begin
- Result := x.obj_class;
-end;
-
-function ObjData(const x: TRsvpObjHdr): Pointer;
-begin
- Result := Pointer(Integer(@x) + SizeOf(x));
-end;
-
-function Style_is_Wildcard(p: DWORD): Boolean;
-begin
- Result := (p and Opt_SndSel_mask) = Opt_Wildcard;
-end;
-
-function Style_is_Shared(p: DWORD): Boolean;
-begin
- Result := (p and Opt_Share_mask) = Opt_Shared;
-end;
-
-function Error_Usage(x: DWORD): DWORD;
-begin
- Result := (x shr 12) and 3;
-end;
-
-function Intserv_Version(x: DWORD): DWORD;
-begin
- Result := (x and INTSERV_VERS_MASK) shr 4;
-end;
-
-function Intserv_Version_OK(const x: TIntServMainHdr): Boolean;
-begin
- Result := (x.ismh_version and INTSERV_VERS_MASK) = INTSERV_VERSION0;
-end;
-
-function Intserv_Obj_size(const x: TIntServMainHdr): DWORD;
-begin
- Result := x.ismh_len32b * 4 + SizeOf(IntServMainHdr) + SizeOf(RsvpObjHdr);
-end;
-
-function Issh_len32b(const p: TIntServServiceHdr): USHORT;
-begin
- Result := p.issh_len32b;
-end;
-
-{$IFDEF DYNAMIC_LINK}
-
-var
- _LPM_Initialize: Pointer;
-
-function LPM_Initialize;
-begin
- GetProcedureAddress(_LPM_Initialize, lpmlib, 'LPM_Initialize');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LPM_Initialize]
- end;
-end;
-
-var
- _LPM_Deinitialize: Pointer;
-
-function LPM_Deinitialize;
-begin
- GetProcedureAddress(_LPM_Deinitialize, lpmlib, 'LPM_Deinitialize');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LPM_Deinitialize]
- end;
-end;
-
-var
- _LPM_AdmitRsvpMsg: Pointer;
-
-function LPM_AdmitRsvpMsg;
-begin
- GetProcedureAddress(_LPM_AdmitRsvpMsg, lpmlib, 'LPM_AdmitRsvpMsg');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LPM_AdmitRsvpMsg]
- end;
-end;
-
-var
- _LPM_GetRsvpObjects: Pointer;
-
-function LPM_GetRsvpObjects;
-begin
- GetProcedureAddress(_LPM_GetRsvpObjects, lpmlib, 'LPM_GetRsvpObjects');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LPM_GetRsvpObjects]
- end;
-end;
-
-var
- _LPM_DeleteState: Pointer;
-
-procedure LPM_DeleteState;
-begin
- GetProcedureAddress(_LPM_DeleteState, lpmlib, 'LPM_DeleteState');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LPM_DeleteState]
- end;
-end;
-
-var
- _LPM_IpAddressTable: Pointer;
-
-function LPM_IpAddressTable;
-begin
- GetProcedureAddress(_LPM_IpAddressTable, lpmlib, 'LPM_IpAddressTable');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LPM_IpAddressTable]
- end;
-end;
-
-var
- _LPM_CommitResv: Pointer;
-
-procedure LPM_CommitResv;
-begin
- GetProcedureAddress(_LPM_CommitResv, lpmlib, 'LPM_CommitResv');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LPM_CommitResv]
- end;
-end;
-
-{$ELSE}
-
-function LPM_Initialize; external lpmlib name 'LPM_Initialize';
-function LPM_Deinitialize; external lpmlib name 'LPM_Deinitialize';
-function LPM_AdmitRsvpMsg; external lpmlib name 'LPM_AdmitRsvpMsg';
-function LPM_GetRsvpObjects; external lpmlib name 'LPM_GetRsvpObjects';
-procedure LPM_DeleteState; external lpmlib name 'LPM_DeleteState';
-function LPM_IpAddressTable; external lpmlib name 'LPM_IpAddressTable';
-procedure LPM_CommitResv; external lpmlib name 'LPM_CommitResv';
-
-{$ENDIF DYNAMIC_LINK}
-
-end.
+{******************************************************************************} +{ } +{ Winsock2 RSVP/LPM API interface Unit for Object Pascal } +{ } +{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft } +{ Corporation. All Rights Reserved. } +{ } +{ The original file is: lpmapi.h, released June 2000. The original Pascal } +{ code is: LpmApi.pas, released December 2000. The initial developer of the } +{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). } +{ } +{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 } +{ Marcel van Brakel. All Rights Reserved. } +{ } +{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) } +{ } +{ You may retrieve the latest version of this file at the Project JEDI } +{ APILIB home page, located at http://jedi-apilib.sourceforge.net } +{ } +{ The contents of this file are used with permission, subject to the Mozilla } +{ Public License Version 1.1 (the "License"); you may not use this file except } +{ in compliance with the License. You may obtain a copy of the License at } +{ http://www.mozilla.org/MPL/MPL-1.1.html } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, } +{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for } +{ the specific language governing rights and limitations under the License. } +{ } +{ Alternatively, the contents of this file may be used under the terms of the } +{ GNU Lesser General Public License (the "LGPL License"), in which case the } +{ provisions of the LGPL License are applicable instead of those above. } +{ If you wish to allow use of your version of this file only under the terms } +{ of the LGPL License and not to allow others to use your version of this file } +{ under the MPL, indicate your decision by deleting the provisions above and } +{ replace them with the notice and other provisions required by the LGPL } +{ License. If you do not delete the provisions above, a recipient may use } +{ your version of this file under either the MPL or the LGPL License. } +{ } +{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html } +{ } +{******************************************************************************} + +// $Id: jwalpmapi.pas,v 1.1 2005/04/04 07:56:10 marco Exp $ + +unit JwaLpmApi; + +{$WEAKPACKAGEUNIT} + +{$HPPEMIT ''} +{$HPPEMIT '#include "lpmapi.h"'} +{$HPPEMIT ''} + +{$I jediapilib.inc} + +interface + +uses + JwaWinSock2, JwaWinType; + +type + FLOAT = Single; + {$NODEFINE FLOAT} + +(**************************************************************************** + + RSVPD -- ReSerVation Protocol Daemon + + USC Information Sciences Institute + Marina del Rey, California + + Original Version: Shai Herzog, Nov. 1993. + Current Version: Steven Berson & Bob Braden, may 1996. + + Copyright (c) 1996 by the University of Southern California + All rights reserved. + + Permission to use, copy, modify, and distribute this software and its + documentation in source and binary forms for any purpose and without + fee is hereby granted, provided that both the above copyright notice + and this permission notice appear in all copies, and that any + documentation, advertising materials, and other materials related to + such distribution and use acknowledge that the software was developed + in part by the University of Southern California, Information + Sciences Institute. The name of the University may not be used to + endorse or promote products derived from this software without + specific prior written permission. + + THE UNIVERSITY OF SOUTHERN CALIFORNIA makes no representations about + the suitability of this software for any purpose. THIS SOFTWARE IS + PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + Other copyrights might apply to parts of this software and are so + noted when applicable. + +********************************************************************) + +(* + * Standard format of an RSVP object header + *) + +type + RsvpObjHdr = record + obj_length: USHORT; (* Length in bytes *) + obj_class: UCHAR; (* Class (values defined below) *) + obj_ctype: UCHAR; (* C-Type (values defined below) *) + end; + {$EXTERNALSYM RsvpObjHdr} + TRsvpObjHdr = RsvpObjHdr; + PRsvpObjHdr = ^RsvpObjHdr; + PPRsvpObjHdr = ^PRsvpObjHdr; + +function ObjLength(const x: TRsvpObjHdr): USHORT; +{$EXTERNALSYM ObjLength} +function ObjCType(const x: TRsvpObjHdr): UCHAR; +{$EXTERNALSYM ObjCType} +function ObjClass(const x: TRsvpObjHdr): UCHAR; +{$EXTERNALSYM ObjClass} +function ObjData(const x: TRsvpObjHdr): Pointer; +{$EXTERNALSYM ObjData} + +(* + * Define object classes: Class-Num values + *) + +const + class_NULL = 0; + {$EXTERNALSYM class_NULL} + class_SESSION = 1; + {$EXTERNALSYM class_SESSION} + class_SESSION_GROUP = 2; + {$EXTERNALSYM class_SESSION_GROUP} + class_RSVP_HOP = 3; + {$EXTERNALSYM class_RSVP_HOP} + class_INTEGRITY = 4; + {$EXTERNALSYM class_INTEGRITY} + class_TIME_VALUES = 5; + {$EXTERNALSYM class_TIME_VALUES} + class_ERROR_SPEC = 6; + {$EXTERNALSYM class_ERROR_SPEC} + class_SCOPE = 7; + {$EXTERNALSYM class_SCOPE} + class_STYLE = 8; + {$EXTERNALSYM class_STYLE} + class_FLOWSPEC = 9; // these two are the same + {$EXTERNALSYM class_FLOWSPEC} + class_IS_FLOWSPEC = 9; // since we added IS in front of the name + {$EXTERNALSYM class_IS_FLOWSPEC} + class_FILTER_SPEC = 10; + {$EXTERNALSYM class_FILTER_SPEC} + class_SENDER_TEMPLATE = 11; + {$EXTERNALSYM class_SENDER_TEMPLATE} + class_SENDER_TSPEC = 12; + {$EXTERNALSYM class_SENDER_TSPEC} + class_ADSPEC = 13; + {$EXTERNALSYM class_ADSPEC} + class_POLICY_DATA = 14; + {$EXTERNALSYM class_POLICY_DATA} + class_CONFIRM = 15; + {$EXTERNALSYM class_CONFIRM} + class_MAX = 15; + {$EXTERNALSYM class_MAX} + +(* + * RSVP SESSION object + *) + + ctype_SESSION_ipv4 = 1; + {$EXTERNALSYM ctype_SESSION_ipv4} + ctype_SESSION_ipv4GPI = 3 (* IPSEC: Generalized Port Id *); + {$EXTERNALSYM ctype_SESSION_ipv4GPI} + + SESSFLG_E_Police = $01 (* E_Police: Entry policing flag*); + {$EXTERNALSYM SESSFLG_E_Police} + +type + Session_IPv4 = record + sess_destaddr: IN_ADDR; // DestAddress + sess_protid: UCHAR; // Protocol Id + sess_flags: UCHAR; // Use the flags defined above + sess_destport: USHORT; // DestPort + end; + {$EXTERNALSYM Session_IPv4} + TSessionIPv4 = Session_IPv4; + PSessionIPv4 = ^Session_IPv4; + +(* GPI versions have virtual dest port instead of dest port; this + * changes the interpretation but not the format, so we do not + * define new structs for GPI. + *) + + RSVP_SESSION = record + sess_header: RsvpObjHdr; + case Integer of + 0: (sess_ipv4: Session_IPv4); + end; + {$EXTERNALSYM RSVP_SESSION} + TRsvpSession = RSVP_SESSION; + PRsvpSession = ^RSVP_SESSION; + +// Useful defines to access components of SESSION obect + +//#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 + +(* + * RSVP HOP object + *) + +const + ctype_RSVP_HOP_ipv4 = 1; + {$EXTERNALSYM ctype_RSVP_HOP_ipv4} + +type + Rsvp_Hop_IPv4 = record + hop_ipaddr: IN_ADDR; // Next/Previous Hop Address + hop_LIH: ULONG; // Logical Interface Handle + end; + {$EXTERNALSYM Rsvp_Hop_IPv4} + TRsvpHopIPv4 = Rsvp_Hop_IPv4; + PRsvpHopIPv4 = ^Rsvp_Hop_IPv4; + + RSVP_HOP = record + hop_header: RsvpObjHdr; + case Integer of + 0: (hop_ipv4: Rsvp_Hop_IPv4); + end; + {$EXTERNALSYM RSVP_HOP} + TRsvpHop = RSVP_HOP; + PRsvpHop = ^RSVP_HOP; + +//#define Hop4LIH hop_u.hop_ipv4.hop_LIH +//#define Hop4Addr hop_u.hop_ipv4.hop_ipaddr + +(* + * RSVP STYLE object + *) + +// Define values for option vector + +const + Opt_Share_mask = $00000018; // 2 bits: Sharing control + {$EXTERNALSYM Opt_Share_mask} + Opt_Distinct = $00000008; // Distinct reservations + {$EXTERNALSYM Opt_Distinct} + Opt_Shared = $00000010; // Shared reservations + {$EXTERNALSYM Opt_Shared} + + Opt_SndSel_mask = $00000007; // 3 bits: Sender selection + {$EXTERNALSYM Opt_SndSel_mask} + Opt_Wildcard = $00000001; // Wildcard scope + {$EXTERNALSYM Opt_Wildcard} + Opt_Explicit = $00000002; // Explicit scope + {$EXTERNALSYM Opt_Explicit} + +function Style_is_Wildcard(p: DWORD): Boolean; +{$EXTERNALSYM Style_is_Wildcard} +function Style_is_Shared(p: DWORD): Boolean; +{$EXTERNALSYM Style_is_Shared} + +// Define style values + +const + STYLE_WF = Opt_Shared + Opt_Wildcard; + {$EXTERNALSYM STYLE_WF} + STYLE_FF = Opt_Distinct + Opt_Explicit; + {$EXTERNALSYM STYLE_FF} + STYLE_SE = Opt_Shared + Opt_Explicit; + {$EXTERNALSYM STYLE_SE} + + ctype_STYLE = 1; + {$EXTERNALSYM ctype_STYLE} + +type + RESV_STYLE = record + style_header: RsvpObjHdr; + style_word: ULONG; + end; + {$EXTERNALSYM RESV_STYLE} + TResvStyle = RESV_STYLE; + PResvStyle = ^RESV_STYLE; + +(* + * RSVP FILTER SPEC object + *) + +const + ctype_FILTER_SPEC_ipv4 = 1; // IPv4 FILTER_SPEC + {$EXTERNALSYM ctype_FILTER_SPEC_ipv4} + ctype_FILTER_SPEC_ipv4GPI = 4; // IPv4/GPI FILTER_SPEC + {$EXTERNALSYM ctype_FILTER_SPEC_ipv4GPI} + +type + Filter_Spec_IPv4 = record + filt_ipaddr: IN_ADDR; // IPv4 SrcAddress + filt_unused: USHORT; + filt_port: USHORT; // SrcPort + end; + {$EXTERNALSYM Filter_Spec_IPv4} + TFilterSpecIPv4 = Filter_Spec_IPv4; + PFilterSpecIPv4 = ^Filter_Spec_IPv4; + + Filter_Spec_IPv4GPI = record + filt_ipaddr: IN_ADDR; // IPv4 SrcAddress + filt_gpi: ULONG; // Generalized Port Id + end; + {$EXTERNALSYM Filter_Spec_IPv4GPI} + TFilterSpecIPv4GPI = Filter_Spec_IPv4GPI; + PFilterSpecIPv4GPI = ^Filter_Spec_IPv4GPI; + + FILTER_SPEC = record + filt_header: RsvpObjHdr; + case Integer of + 0: (filt_ipv4: Filter_Spec_IPv4); + 1: (filt_ipv4gpi: Filter_Spec_IPv4GPI); + end; + {$EXTERNALSYM FILTER_SPEC} + TFilterSpec = FILTER_SPEC; + PFilterSpec = ^FILTER_SPEC; + +//#define FilterSrcaddr filt_u.filt_ipv4.filt_ipaddr +//#define FilterSrcport filt_u.filt_ipv4.filt_port + +(* + * RSVP SENDER_TEMPLATE object + *) + +const + ctype_SENDER_TEMPLATE_ipv4 = 1; // IPv4 SENDER_TEMPLATE + {$EXTERNALSYM ctype_SENDER_TEMPLATE_ipv4} + ctype_SENDER_TEMPLATE_ipv4GPI = 4; // IPv4/GPI SENDER_TEMPLATE + {$EXTERNALSYM ctype_SENDER_TEMPLATE_ipv4GPI} + +type + SENDER_TEMPLATE = FILTER_SPEC; // Identical to FILTER_SPEC + {$EXTERNALSYM SENDER_TEMPLATE} + TSenderTemplate = SENDER_TEMPLATE; + PSenderTemplate = ^SENDER_TEMPLATE; + +(* + * RSVP SCOPE object class + *) + +const + ctype_SCOPE_list_ipv4 = 1; + {$EXTERNALSYM ctype_SCOPE_list_ipv4} + +type + Scope_list_ipv4 = record + scopl_ipaddr: array [0..0] of IN_ADDR; // var-len list of IP sender addrs + end; + {$EXTERNALSYM Scope_list_ipv4} + TScopeListIPv4 = Scope_list_ipv4; + PScopeListIPv4 = ^Scope_list_ipv4; + + RSVP_SCOPE = record + scopl_header: RsvpObjHdr; + case Integer of + 0: (scopl_ipv4: Scope_list_ipv4); + end; + {$EXTERNALSYM RSVP_SCOPE} + TRsvpScope = RSVP_SCOPE; + PRsvpScope = ^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)) + +(* + * ERROR_SPEC object class + *) + +const + ctype_ERROR_SPEC_ipv4 = 1; + {$EXTERNALSYM ctype_ERROR_SPEC_ipv4} + + ERROR_SPECF_InPlace = $01; (* Left resv in place *) + {$EXTERNALSYM ERROR_SPECF_InPlace} + ERROR_SPECF_NotGuilty = $02; (* This rcvr not guilty *) + {$EXTERNALSYM ERROR_SPECF_NotGuilty} + ERR_FORWARD_OK = $8000; (* Flag: OK to forward state *) + {$EXTERNALSYM ERR_FORWARD_OK} + +function Error_Usage(x: DWORD): DWORD; +{$EXTERNALSYM Error_Usage} + +const + ERR_Usage_globl = $00; (* Globally-defined sub-code *) + {$EXTERNALSYM ERR_Usage_globl} + ERR_Usage_local = $10; (* Locally-defined sub-code *) + {$EXTERNALSYM ERR_Usage_local} + ERR_Usage_serv = $11; (* Service-defined sub-code *) + {$EXTERNALSYM ERR_Usage_serv} + ERR_global_mask = $0fff; (* Sub-code bits in Error Val *) + {$EXTERNALSYM ERR_global_mask} + +type + Error_Spec_IPv4 = record + errs_errnode: in_addr; (* Error Node Address *) + errs_flags: u_char; (* Flags: *) + errs_code: UCHAR; (* Error Code (def'd below) *) + errs_value: USHORT; (* Error Value *) + end; + {$EXTERNALSYM Error_Spec_IPv4} + TErrorSpecIPv4 = Error_Spec_IPv4; + PErrorSpecIPv4 = ^Error_Spec_IPv4; + +type + ERROR_SPEC = record + errs_header: RsvpObjHdr; + case Integer of + 0: (errs_ipv4: Error_Spec_IPv4); + end; + {$EXTERNALSYM ERROR_SPEC} + TErrorSpec = ERROR_SPEC; + PErrorSpec = ^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 + +(* + * POLICY_DATA object class + * + * Contents are Opaque RSVP/SBM + *) + +const + ctype_POLICY_DATA = 1; + {$EXTERNALSYM ctype_POLICY_DATA} + +type + POLICY_DATA = record + PolicyObjHdr: RsvpObjHdr; + usPeOffset: USHORT; // Offset to the start of Policy Elements from the begining of Policy Data + usReserved: USHORT; + end; + {$EXTERNALSYM POLICY_DATA} + TPolicyData = POLICY_DATA; + PPolicyData = ^POLICY_DATA; + +const + PD_HDR_LEN = SizeOf(POLICY_DATA); + {$EXTERNALSYM PD_HDR_LEN} + +type + POLICY_ELEMENT = record + usPeLength: USHORT; // Policy Element length + usPeType: USHORT; // Policy Element type + ucPeData: array [0..3] of UCHAR; // Just a place holder to the start of Policy Element data + end; + {$EXTERNALSYM POLICY_ELEMENT} + TPolicyElement = POLICY_ELEMENT; + PPolicyElement = ^POLICY_ELEMENT; + +const + PE_HDR_LEN = 2 * SizeOf(USHORT); + {$EXTERNALSYM PE_HDR_LEN} + +(************************************************************************** + * + * Int-Serv Data Structures + * + **************************************************************************) + +(* + * Service numbers + *) + +const + GENERAL_INFO = 1; + {$EXTERNALSYM GENERAL_INFO} + GUARANTEED_SERV = 2; + {$EXTERNALSYM GUARANTEED_SERV} + PREDICTIVE_SERV = 3; + {$EXTERNALSYM PREDICTIVE_SERV} + CONTROLLED_DELAY_SERV = 4; + {$EXTERNALSYM CONTROLLED_DELAY_SERV} + CONTROLLED_LOAD_SERV = 5; + {$EXTERNALSYM CONTROLLED_LOAD_SERV} + QUALITATIVE_SERV = 6; + {$EXTERNALSYM QUALITATIVE_SERV} + +(* + * Well-known parameter IDs + *) + +const + IS_WKP_HOP_CNT = 4; + {$EXTERNALSYM IS_WKP_HOP_CNT} + IS_WKP_PATH_BW = 6; + {$EXTERNALSYM IS_WKP_PATH_BW} + IS_WKP_MIN_LATENCY = 8; + {$EXTERNALSYM IS_WKP_MIN_LATENCY} + IS_WKP_COMPOSED_MTU = 10; + {$EXTERNALSYM IS_WKP_COMPOSED_MTU} + IS_WKP_TB_TSPEC = 127; (* Token-bucket TSPEC parm *) + {$EXTERNALSYM IS_WKP_TB_TSPEC} + IS_WKP_Q_TSPEC = 128; + {$EXTERNALSYM IS_WKP_Q_TSPEC} + +type + int_serv_wkp = DWORD; + {$EXTERNALSYM int_serv_wkp} + TIntServWkp = int_serv_wkp; + +(* + * Int-serv Main header + *) + + IntServMainHdr = record + ismh_version: UCHAR; // Version + ismh_unused: UCHAR; + ismh_len32b: USHORT; // # 32-bit words excluding this hdr + end; + {$EXTERNALSYM IntServMainHdr} + TIntServMainHdr = IntServMainHdr; + PIntServMainHdr = ^IntServMainHdr; + +const + INTSERV_VERS_MASK = $f0; + {$EXTERNALSYM INTSERV_VERS_MASK} + INTSERV_VERSION0 = 0; + {$EXTERNALSYM INTSERV_VERSION0} + +function Intserv_Version(x: DWORD): DWORD; +{$EXTERNALSYM Intserv_Version} +function Intserv_Version_OK(const x: TIntServMainHdr): Boolean; +{$EXTERNALSYM Intserv_Version_OK} + +// Convert ishm_length to equivalent RSVP object size, for checking + +function Intserv_Obj_size(const x: TIntServMainHdr): DWORD; +{$EXTERNALSYM Intserv_Obj_size} + +(* + * Int-serv Service Element Header + *) + +// Flag: Break bit + +const + ISSH_BREAK_BIT = $80; + {$EXTERNALSYM ISSH_BREAK_BIT} + +type + IntServServiceHdr = record + issh_service: UCHAR; // Service number + issh_flags: UCHAR; // Flag byte + issh_len32b: USHORT; // #32-bit words excluding this hdr + end; + {$EXTERNALSYM IntServServiceHdr} + TIntServServiceHdr = IntServServiceHdr; + PIntServServiceHdr = ^IntServServiceHdr; + +function Issh_len32b(const p: TIntServServiceHdr): USHORT; +{$EXTERNALSYM Issh_len32b} + +(* + * Int-serv Parameter Element Header + *) + +const + ISPH_FLG_INV = $80; // Flag: Invalid + {$EXTERNALSYM ISPH_FLG_INV} + +type + IntServParmHdr = record + isph_parm_num: UCHAR; // Parameter number + isph_flags: UCHAR; // Flags + isph_len32b: USHORT; // #32-bit words excluding this hdr + end; + {$EXTERNALSYM IntServParmHdr} + TIntServParmHdr = IntServParmHdr; + PIntServParmHdr = ^IntServParmHdr; + +{ +function Next_Main_Hdr(const p: TIntServMainHdr): PIntServMainHdr; +begin + TODO (IntServMainHdr *)((ULONG *)(p)+1+(p)->ismh_len32b) +end; + +function Next_Serv_Hdr(const p: TIntServMainHdr): ULONG; +begin + TODO (IntServServiceHdr *)((ULONG *)(p)+1+(p)->issh_len32b) +end; + +function Next_Parm_Hdr(const p: TIntServParmHdr): ULONG; +begin + TODO (IntServParmHdr *)((ULONG *)(p)+1+(p)->isph_len32b) +end; +} + +(* + * Generic Tspec Parameters + *) + +type + GenTspecParms = record + TB_Tspec_r: FLOAT; // Token bucket rate (B/sec) + TB_Tspec_b: FLOAT; // Token bucket depth (B) + TB_Tspec_p: FLOAT; // Peak data rate (B/sec) + TB_Tspec_m: ULONG; // Min Policed Unit (B) + TB_Tspec_M_: ULONG; // Max pkt size (B) + end; + {$EXTERNALSYM GenTspecParms} + TGenTspecParms = GenTspecParms; + PGenTspecParms = ^GenTspecParms; + +(* + * Generic Tspec + *) + + GenTspec = record + gen_Tspec_serv_hdr: IntServServiceHdr; // (GENERAL_INFO, length) + gen_Tspec_parm_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC) + gen_Tspec_parms: GenTspecParms; + end; + {$EXTERNALSYM GenTspec} + TGenTspec = GenTspec; + PGenTspec = ^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)) + +(* contents of qualitative tspec *) + +type + QualTspecParms = record + TB_Tspec_M: ULONG; // Max pkt size (M) + end; + {$EXTERNALSYM QualTspecParms} + TQualTspecParms = QualTspecParms; + PQualTspecParms = ^QualTspecParms; + + QualTspec = record + qual_Tspec_serv_hdr: IntServServiceHdr; // (QUALITATIVE_SERV, length) + qual_Tspec_parm_hdr: IntServParmHdr; // (IS_WKP_Q_TSPEC) + qual_Tspec_parms: QualTspecParms; + end; + {$EXTERNALSYM QualTspec} + TQualTspec = QualTspec; + PQualTspec = ^QualTspec; + + QualAppFlowSpec = record + Q_spec_serv_hdr: IntServServiceHdr; // (QUALITATIVE_SERV,0,len) + Q_spec_parm_hdr: IntServParmHdr; // (IS_WKP_Q_TSPEC) + Q_spec_parms: QualTspecParms; // QUALITATIVE Tspec parameters + end; + {$EXTERNALSYM QualAppFlowSpec} + TQualAppFlowSpec = QualAppFlowSpec; + PQualAppFlowSpec = ^QualAppFlowSpec; + +//#define QAspec_M Q_spec_parms.TB_Tspec_M + +(* + * Contents of int-serv Tspec + *) + + IntServTspecBody = record + st_mh: IntServMainHdr; + case Integer of + 0: (gen_stspec: GenTspec); // Generic Tspec + 1: (qual_stspec: QualTspec); + end; + {$EXTERNALSYM IntServTspecBody} + TIntServTspecBody = IntServTspecBody; + PIntServTspecBody = ^IntServTspecBody; + +(* + * SENDER_TSPEC class object + *) + +const + ctype_SENDER_TSPEC = 2; + {$EXTERNALSYM ctype_SENDER_TSPEC} + +type + SENDER_TSPEC = record + stspec_header: RsvpObjHdr; + stspec_body: IntServTspecBody; + end; + {$EXTERNALSYM SENDER_TSPEC} + TSenderTSpec = SENDER_TSPEC; + PSenderTSpec = ^SENDER_TSPEC; + +(* + * Controlled-Load Flowspec + *) + + CtrlLoadFlowspec = record + CL_spec_serv_hdr: IntServServiceHdr; // (CONTROLLED_LOAD_SERV,0,len) + CL_spec_parm_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC) + CL_spec_parms: GenTspecParms; // GENERIC Tspec parameters + end; + {$EXTERNALSYM CtrlLoadFlowspec} + TCtrlLoadFlowspec = CtrlLoadFlowspec; + PCtrlLoadFlowspec = ^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)) + +(* Service-specific Parameter IDs + *) + +const + IS_GUAR_RSPEC = 130; + {$EXTERNALSYM IS_GUAR_RSPEC} + + GUAR_ADSPARM_C = 131; + {$EXTERNALSYM GUAR_ADSPARM_C} + GUAR_ADSPARM_D = 132; + {$EXTERNALSYM GUAR_ADSPARM_D} + GUAR_ADSPARM_Ctot = 133; + {$EXTERNALSYM GUAR_ADSPARM_Ctot} + GUAR_ADSPARM_Dtot = 134; + {$EXTERNALSYM GUAR_ADSPARM_Dtot} + GUAR_ADSPARM_Csum = 135; + {$EXTERNALSYM GUAR_ADSPARM_Csum} + GUAR_ADSPARM_Dsum = 136; + {$EXTERNALSYM GUAR_ADSPARM_Dsum} + +(* + * Guaranteed Rspec parameters + *) + +type + GuarRspec = record + Guar_R: FLOAT; // Guaranteed Rate B/s + Guar_S: ULONG; // Slack term secs + end; + {$EXTERNALSYM GuarRspec} + TGuarRspec = GuarRspec; + PGuarRspec = ^GuarRspec; + +(* + * Guaranteed Flowspec + *) + + GuarFlowSpec = record + Guar_serv_hdr: IntServServiceHdr; // (GUARANTEED, 0, length) + Guar_Tspec_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC,) + Guar_Tspec_parms: GenTspecParms; // GENERIC Tspec parms + Guar_Rspec_hdr: IntServParmHdr; // (IS_GUAR_RSPEC) + Guar_Rspec: GuarRspec; // Guaranteed rate (B/sec) + end; + {$EXTERNALSYM GuarFlowSpec} + TGuarFlowSpec = GuarFlowSpec; + PGuarFlowSpec = ^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)) + +(* + * Contents of int-serv flowspec + *) + +type + IntServFlowSpec = record + spec_mh: IntServMainHdr; + case Integer of + 0: (CL_spec: CtrlLoadFlowspec); // Controlled-Load service + 1: (G_spec: GuarFlowSpec); // Guaranteed service + 2: (Q_spec: QualAppFlowSpec); + end; + {$EXTERNALSYM IntServFlowSpec} + TIntServFlowSpec = IntServFlowSpec; + PIntServFlowSpec = ^IntServFlowSpec; + +//#define ISmh_len32b spec_mh.ismh_len32b +//#define ISmh_version spec_mh.ismh_version +//#define ISmh_unused spec_mh.ismh_unused + +(* + * Int-Serv FLOWSPEC object + *) + +const + ctype_FLOWSPEC_Intserv0 = 2; // The int-serv flowspec (v.0) + {$EXTERNALSYM ctype_FLOWSPEC_Intserv0} + +type + IS_FLOWSPEC = record + flow_header: RsvpObjHdr; + flow_body: IntServFlowSpec; + end; + {$EXTERNALSYM IS_FLOWSPEC} + TIsFlowSpec = IS_FLOWSPEC; + PIsFlowSpec = ^IS_FLOWSPEC; + +(* + * FLOW DESCRIPTOR + *) + + FLOW_DESC = record + u1: record + case Integer of + 0: (stspec: ^SENDER_TSPEC); + 1: (isflow: ^IS_FLOWSPEC); + end; + u2: record + case Integer of + 0: (stemp: ^SENDER_TEMPLATE); + 1: (fspec: ^FILTER_SPEC); + end; + end; + {$EXTERNALSYM FLOW_DESC} + TFlowDesc = FLOW_DESC; + PFlowDesc = ^FLOW_DESC; + +//#define FdSenderTspec u1.stspec +//#define FdIsFlowSpec u1.isflow + +//#define FdSenderTemplate u2.stemp +//#define FdFilterSpec u2.fspec + +(* + * ADSPEC class object + * + * Opaque to RSVP -- Contents defined in rapi_lib.h + *) + +const + ctype_ADSPEC_INTSERV = 2; + {$EXTERNALSYM ctype_ADSPEC_INTSERV} + +(* + * Guaranteed service Adspec parameters -- fixed part + *) + +type + Gads_parms_t = record + Gads_serv_hdr: IntServServiceHdr; // GUARANTEED, x, len + Gads_Ctot_hdr: IntServParmHdr; // GUAR_ADSPARM_Ctot + Gads_Ctot: ULONG; + Gads_Dtot_hdr: IntServParmHdr; // (GUAR_ADSPARM_Dtot + Gads_Dtot: ULONG; + Gads_Csum_hdr: IntServParmHdr; // GUAR_ADSPARM_Csum + Gads_Csum: ULONG; + Gads_Dsum_hdr: IntServParmHdr; // GUAR_ADSPARM_Dsum + Gads_Dsum: ULONG; + (* + * May be followed by override general param values + *) + end; + {$EXTERNALSYM Gads_parms_t} + TGadsParmsT = Gads_parms_t; + PGadsParmsT = ^Gads_parms_t; + +(* + * General Path Characterization Parameters + *) + + GenAdspecParams = record + gen_parm_hdr: IntServServiceHdr; // GENERAL_INFO, len + gen_parm_hopcnt_hdr: IntServParmHdr; // (IS_WKP_HOP_CNT + gen_parm_hopcnt: ULONG; + gen_parm_pathbw_hdr: IntServParmHdr; // IS_WKP_PATH_BW + gen_parm_path_bw: FLOAT; + gen_parm_minlat_hdr: IntServParmHdr; // IS_WKP_MIN_LATENCY + gen_parm_min_latency: ULONG; + gen_parm_compmtu_hdr: IntServParmHdr; // IS_WKP_COMPOSED_MTU + gen_parm_composed_MTU: ULONG; + end; + {$EXTERNALSYM GenAdspecParams} + TGenAdspecParams = GenAdspecParams; + PGenAdspecParams = ^GenAdspecParams; + +(* + * Contents of (minimal) int-serv Adspec + *) + + IS_ADSPEC_BODY = record + adspec_mh: IntServMainHdr; // Main header + adspec_genparms: GenAdspecParams;// General char parm fragment + (* + * Followed by variable-length fragments for some or all + * services. These can be minimal length fragments. + *) + end; + {$EXTERNALSYM IS_ADSPEC_BODY} + TIsAdSpecBody = IS_ADSPEC_BODY; + PIsAdSpecBody = ^IS_ADSPEC_BODY; + +//const TODO Unknown Object_Header +// GEN_ADSPEC_LEN = SizeOf(Object_header) + SizeOf(IS_adsbody_t); +// {$EXTERNALSYM GEN_ADSPEC_LEN} + +type + ADSPEC = record + adspec_header: RsvpObjHdr; + adspec_body: IS_ADSPEC_BODY; (* Defined in rapi_lib.h *) + end; + {$EXTERNALSYM ADSPEC} + TAdSpec = ADSPEC; + PAdSpec = ^ADSPEC; + +// RSVP message types + +const + RSVP_PATH = 1; + {$EXTERNALSYM RSVP_PATH} + RSVP_RESV = 2; + {$EXTERNALSYM RSVP_RESV} + RSVP_PATH_ERR = 3; + {$EXTERNALSYM RSVP_PATH_ERR} + RSVP_RESV_ERR = 4; + {$EXTERNALSYM RSVP_RESV_ERR} + RSVP_PATH_TEAR = 5; + {$EXTERNALSYM RSVP_PATH_TEAR} + RSVP_RESV_TEAR = 6; + {$EXTERNALSYM RSVP_RESV_TEAR} + +(* RSVP error codes + *) + + RSVP_Err_NONE = 0; (* No error (CONFIRM) *) + {$EXTERNALSYM RSVP_Err_NONE} + RSVP_Erv_Nonev = 0; (* No-error Error Value *) + {$EXTERNALSYM RSVP_Erv_Nonev} + +(* Admission Control failure *) + + RSVP_Err_ADMISSION = 1; + {$EXTERNALSYM RSVP_Err_ADMISSION} + +(* Globally-defined sub-codes for : Admission Control failure *) + + RSVP_Erv_Other = 0; (* Unspecified cause *) + {$EXTERNALSYM RSVP_Erv_Other} + RSVP_Erv_DelayBnd = 1; (* Cannot meet delay bound req *) + {$EXTERNALSYM RSVP_Erv_DelayBnd} + RSVP_Erv_Bandwidth = 2; (* Insufficient bandwidth *) + {$EXTERNALSYM RSVP_Erv_Bandwidth} + RSVP_Erv_MTU = 3; (* MTU in flowspec too large *) + {$EXTERNALSYM RSVP_Erv_MTU} + +// Microsoft specific error values + + RSVP_Erv_Flow_Rate = $8001; + {$EXTERNALSYM RSVP_Erv_Flow_Rate} + RSVP_Erv_Bucket_szie = $8002; + {$EXTERNALSYM RSVP_Erv_Bucket_szie} + RSVP_Erv_Peak_Rate = $8003; + {$EXTERNALSYM RSVP_Erv_Peak_Rate} + RSVP_Erv_Min_Policied_size = $8004; + {$EXTERNALSYM RSVP_Erv_Min_Policied_size} + +(* Policy control failure *) + + RSVP_Err_POLICY = 2; + {$EXTERNALSYM RSVP_Err_POLICY} + +// Policy error values from Identity draft + + POLICY_ERRV_NO_MORE_INFO = 1; + {$EXTERNALSYM POLICY_ERRV_NO_MORE_INFO} + POLICY_ERRV_UNSUPPORTED_CREDENTIAL_TYPE = 2; + {$EXTERNALSYM POLICY_ERRV_UNSUPPORTED_CREDENTIAL_TYPE} + POLICY_ERRV_INSUFFICIENT_PRIVILEGES = 3; + {$EXTERNALSYM POLICY_ERRV_INSUFFICIENT_PRIVILEGES} + POLICY_ERRV_EXPIRED_CREDENTIALS = 4; + {$EXTERNALSYM POLICY_ERRV_EXPIRED_CREDENTIALS} + POLICY_ERRV_IDENTITY_CHANGED = 5; + {$EXTERNALSYM POLICY_ERRV_IDENTITY_CHANGED} + +// Microsoft specific policy error values + + POLICY_ERRV_UNKNOWN = 0; + {$EXTERNALSYM POLICY_ERRV_UNKNOWN} + + POLICY_ERRV_GLOBAL_DEF_FLOW_COUNT = 1; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_COUNT} + POLICY_ERRV_GLOBAL_GRP_FLOW_COUNT = 2; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_COUNT} + POLICY_ERRV_GLOBAL_USER_FLOW_COUNT = 3; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_COUNT} + POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_COUNT = 4; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_COUNT} + POLICY_ERRV_SUBNET_DEF_FLOW_COUNT = 5; + {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_COUNT} + POLICY_ERRV_SUBNET_GRP_FLOW_COUNT = 6; + {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_COUNT} + POLICY_ERRV_SUBNET_USER_FLOW_COUNT = 7; + {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_COUNT} + POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_COUNT = 8; + {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_COUNT} + + POLICY_ERRV_GLOBAL_DEF_FLOW_DURATION = 9; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_DURATION} + POLICY_ERRV_GLOBAL_GRP_FLOW_DURATION = 10; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_DURATION} + POLICY_ERRV_GLOBAL_USER_FLOW_DURATION = 11; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_DURATION} + POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_DURATION = 12; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_DURATION} + POLICY_ERRV_SUBNET_DEF_FLOW_DURATION = 13; + {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_DURATION} + POLICY_ERRV_SUBNET_GRP_FLOW_DURATION = 14; + {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_DURATION} + POLICY_ERRV_SUBNET_USER_FLOW_DURATION = 15; + {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_DURATION} + POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_DURATION = 16; + {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_DURATION} + + POLICY_ERRV_GLOBAL_DEF_FLOW_RATE = 17; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_RATE} + POLICY_ERRV_GLOBAL_GRP_FLOW_RATE = 18; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_RATE} + POLICY_ERRV_GLOBAL_USER_FLOW_RATE = 19; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_RATE} + POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_RATE = 20; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_RATE} + POLICY_ERRV_SUBNET_DEF_FLOW_RATE = 21; + {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_RATE} + POLICY_ERRV_SUBNET_GRP_FLOW_RATE = 22; + {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_RATE} + POLICY_ERRV_SUBNET_USER_FLOW_RATE = 23; + {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_RATE} + POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_RATE = 24; + {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_RATE} + + POLICY_ERRV_GLOBAL_DEF_PEAK_RATE = 25; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_PEAK_RATE} + POLICY_ERRV_GLOBAL_GRP_PEAK_RATE = 26; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_PEAK_RATE} + POLICY_ERRV_GLOBAL_USER_PEAK_RATE = 27; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_PEAK_RATE} + POLICY_ERRV_GLOBAL_UNAUTH_USER_PEAK_RATE = 28; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_PEAK_RATE} + POLICY_ERRV_SUBNET_DEF_PEAK_RATE = 29; + {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_PEAK_RATE} + POLICY_ERRV_SUBNET_GRP_PEAK_RATE = 30; + {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_PEAK_RATE} + POLICY_ERRV_SUBNET_USER_PEAK_RATE = 31; + {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_PEAK_RATE} + POLICY_ERRV_SUBNET_UNAUTH_USER_PEAK_RATE = 32; + {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_PEAK_RATE} + + POLICY_ERRV_GLOBAL_DEF_SUM_FLOW_RATE = 33; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_SUM_FLOW_RATE} + POLICY_ERRV_GLOBAL_GRP_SUM_FLOW_RATE = 34; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_SUM_FLOW_RATE} + POLICY_ERRV_GLOBAL_USER_SUM_FLOW_RATE = 35; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_SUM_FLOW_RATE} + POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_FLOW_RATE = 36; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_FLOW_RATE} + POLICY_ERRV_SUBNET_DEF_SUM_FLOW_RATE = 37; + {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_SUM_FLOW_RATE} + POLICY_ERRV_SUBNET_GRP_SUM_FLOW_RATE = 38; + {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_SUM_FLOW_RATE} + POLICY_ERRV_SUBNET_USER_SUM_FLOW_RATE = 39; + {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_SUM_FLOW_RATE} + POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_FLOW_RATE = 40; + {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_FLOW_RATE} + + POLICY_ERRV_GLOBAL_DEF_SUM_PEAK_RATE = 41; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_SUM_PEAK_RATE} + POLICY_ERRV_GLOBAL_GRP_SUM_PEAK_RATE = 42; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_SUM_PEAK_RATE} + POLICY_ERRV_GLOBAL_USER_SUM_PEAK_RATE = 43; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_SUM_PEAK_RATE} + POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_PEAK_RATE = 44; + {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_PEAK_RATE} + POLICY_ERRV_SUBNET_DEF_SUM_PEAK_RATE = 45; + {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_SUM_PEAK_RATE} + POLICY_ERRV_SUBNET_GRP_SUM_PEAK_RATE = 46; + {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_SUM_PEAK_RATE} + POLICY_ERRV_SUBNET_USER_SUM_PEAK_RATE = 47; + {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_SUM_PEAK_RATE} + POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_PEAK_RATE = 48; + {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_PEAK_RATE} + + POLICY_ERRV_UNKNOWN_USER = 49; + {$EXTERNALSYM POLICY_ERRV_UNKNOWN_USER} + POLICY_ERRV_NO_PRIVILEGES = 50; + {$EXTERNALSYM POLICY_ERRV_NO_PRIVILEGES} + POLICY_ERRV_EXPIRED_USER_TOKEN = 51; + {$EXTERNALSYM POLICY_ERRV_EXPIRED_USER_TOKEN} + POLICY_ERRV_NO_RESOURCES = 52; + {$EXTERNALSYM POLICY_ERRV_NO_RESOURCES} + POLICY_ERRV_PRE_EMPTED = 53; + {$EXTERNALSYM POLICY_ERRV_PRE_EMPTED} + POLICY_ERRV_USER_CHANGED = 54; + {$EXTERNALSYM POLICY_ERRV_USER_CHANGED} + POLICY_ERRV_NO_ACCEPTS = 55; + {$EXTERNALSYM POLICY_ERRV_NO_ACCEPTS} + POLICY_ERRV_NO_MEMORY = 56; + {$EXTERNALSYM POLICY_ERRV_NO_MEMORY} + POLICY_ERRV_CRAZY_FLOWSPEC = 57; + {$EXTERNALSYM POLICY_ERRV_CRAZY_FLOWSPEC} + +// Other RSVP defined Error codes + + RSVP_Err_NO_PATH = 3; (* No path state for Resv *) + {$EXTERNALSYM RSVP_Err_NO_PATH} + RSVP_Err_NO_SENDER = 4; (* No sender info for Resv *) + {$EXTERNALSYM RSVP_Err_NO_SENDER} + RSVP_Err_BAD_STYLE = 5; (* Conflicting style *) + {$EXTERNALSYM RSVP_Err_BAD_STYLE} + RSVP_Err_UNKNOWN_STYLE = 6; (* Unknown reservation style *) + {$EXTERNALSYM RSVP_Err_UNKNOWN_STYLE} + RSVP_Err_BAD_DSTPORT = 7; (* Conflicting DstPort in Sess *) + {$EXTERNALSYM RSVP_Err_BAD_DSTPORT} + RSVP_Err_BAD_SNDPORT = 8; (* Conflicting Sender port *) + {$EXTERNALSYM RSVP_Err_BAD_SNDPORT} + RSVP_Err_AMBIG_FILTER = 9; (* Ambiguous Filter spec in Resv*) + {$EXTERNALSYM RSVP_Err_AMBIG_FILTER} + + RSVP_Err_PREEMPTED = 12; (* Service Preempted *) + {$EXTERNALSYM RSVP_Err_PREEMPTED} + +(* Unknown object Class-Num *) + + RSVP_Err_UNKN_OBJ_CLASS = 13; + {$EXTERNALSYM RSVP_Err_UNKN_OBJ_CLASS} + +(* ErrVal = Class_num, CType *) + + (* Unknown object C-Type *) + + RSVP_Err_UNKNOWN_CTYPE = 14; + {$EXTERNALSYM RSVP_Err_UNKNOWN_CTYPE} + +(* ErrVal = Class_num, CType *) + + RSVP_Err_API_ERROR = 20; (* API client error *) + {$EXTERNALSYM RSVP_Err_API_ERROR} + +(* ErrVal = API error code *) + +(* Traffic Control error *) + + RSVP_Err_TC_ERROR = 21; + {$EXTERNALSYM RSVP_Err_TC_ERROR} + +(* Globally-defined sub-codes for : Traffic Control errors *) + + RSVP_Erv_Conflict_Serv = 01; (* Service Conflict *) + {$EXTERNALSYM RSVP_Erv_Conflict_Serv} + RSVP_Erv_No_Serv = 02; (* Unknown Service *) + {$EXTERNALSYM RSVP_Erv_No_Serv} + RSVP_Erv_Crazy_Flowspec = 03; (* Unreasonable Flowspec *) + {$EXTERNALSYM RSVP_Erv_Crazy_Flowspec} + RSVP_Erv_Crazy_Tspec = 04; (* Unreasonable Tspec *) + {$EXTERNALSYM RSVP_Erv_Crazy_Tspec} + + RSVP_Err_TC_SYS_ERROR = 22; (* Traffic control system error *) + {$EXTERNALSYM RSVP_Err_TC_SYS_ERROR} + +(* ErrVal = kernel error code *) + +(* RSVP System error *) + + RSVP_Err_RSVP_SYS_ERROR = 23; + {$EXTERNALSYM RSVP_Err_RSVP_SYS_ERROR} + +(* Globally-defined sub-codes for : RSVP system errors *) + + RSVP_Erv_MEMORY = 1; (* Out of memory *) + {$EXTERNALSYM RSVP_Erv_MEMORY} + RSVP_Erv_API = 2; (* API logic error *) + {$EXTERNALSYM RSVP_Erv_API} + +// Identity Policy elements related defines + +// Reseved Identity PE types + + LPM_PE_USER_IDENTITY = 2; + {$EXTERNALSYM LPM_PE_USER_IDENTITY} + LPM_PE_APP_IDENTITY = 3; + {$EXTERNALSYM LPM_PE_APP_IDENTITY} + +// Defines for Identity error values + + ERROR_NO_MORE_INFO = 1; + {$EXTERNALSYM ERROR_NO_MORE_INFO} + UNSUPPORTED_CREDENTIAL_TYPE = 2; + {$EXTERNALSYM UNSUPPORTED_CREDENTIAL_TYPE} + INSUFFICIENT_PRIVILEGES = 3; + {$EXTERNALSYM INSUFFICIENT_PRIVILEGES} + EXPIRED_CREDENTIAL = 4; + {$EXTERNALSYM EXPIRED_CREDENTIAL} + IDENTITY_CHANGED = 5; + {$EXTERNALSYM IDENTITY_CHANGED} + +type + ID_ERROR_OBJECT = record + usIdErrLength: USHORT; + ucAType: UCHAR; + ucSubType: UCHAR; + usReserved: USHORT; + usIdErrorValue: USHORT; + ucIdErrData: array [0..3] of UCHAR; + end; + {$EXTERNALSYM ID_ERROR_OBJECT} + TIdErrorObject = ID_ERROR_OBJECT; + PIdErrorObject = ^ID_ERROR_OBJECT; + +const + ID_ERR_OBJ_HDR_LEN = SizeOf(ID_ERROR_OBJECT) - 4 * SizeOf(UCHAR); + {$EXTERNALSYM ID_ERR_OBJ_HDR_LEN} + +(* + + LPM API specific definitions + +*) + +(************************************** + + LPM_Initialize + +***************************************) + +type + LPM_HANDLE = HANDLE; + {$EXTERNALSYM LPM_HANDLE} + + RHANDLE = HANDLE; + {$EXTERNALSYM RHANDLE} + + LPV = ULONG; + {$EXTERNALSYM LPV} + + PETYPE = USHORT; + {$EXTERNALSYM PETYPE} + +const + LPM_OK = 0; + {$EXTERNALSYM LPM_OK} + +type + MSG_TYPE = Integer; + {$EXTERNALSYM MSG_TYPE} + TMsgType = MSG_TYPE; + + rsvpmsgobjs = record + RsvpMsgType: TMsgType; + pRsvpSession: PRsvpSession; + pRsvpFromHop: PRsvpHop; + pRsvpToHop: PRsvpHop; + pResvStyle: PResvStyle; + pRsvpScope: PRsvpScope; + FlowDescCount: Integer; + pFlowDescs: PFlowDesc; + PdObjectCount: Integer; + ppPdObjects: ^PPolicyData; + pErrorSpec: PErrorSpec; + pAdspec: PADSpec; + end; + {$EXTERNALSYM rsvpmsgobjs} + RSVP_MSG_OBJS = rsvpmsgobjs; + {$EXTERNALSYM RSVP_MSG_OBJS} + TRsvpMsgObjs = RSVP_MSG_OBJS; + PRsvpMsgObjs = ^RSVP_MSG_OBJS; + + PALLOCMEM = function(Size: DWORD): Pointer; stdcall; + {$EXTERNALSYM PALLOCMEM} + TAllocMem = PALLOCMEM; + + PFREEMEM = procedure(pv: Pointer); stdcall; + {$EXTERNALSYM PFREEMEM} + TFreeMem = PFREEMEM; + + policy_decision = record + lpvResult: LPV; // Use the LPV values from above + wPolicyErrCode: WORD; // RSVP defined error codes + wPolicyErrValue: WORD; // RSVP defined error values + end; + {$EXTERNALSYM policy_decision} + TPolicyDecision = policy_decision; + PPolicyDecision = ^policy_decision; + + CBADMITRESULT = function(LpmHandle: LPM_HANDLE; RequestHandle: RHANDLE; + ulPcmActionFlags: ULONG; LpmError: Integer; PolicyDecisionsCount: Integer; + pPolicyDecisions: PPolicyDecision): ULONG; stdcall; + {$EXTERNALSYM CBADMITRESULT} + TCbAdmitResult = CBADMITRESULT; + + CBGETRSVPOBJECTS = function(LpmHandle: LPM_HANDLE; RequestHandle: RHANDLE; + LpmError: Integer; RsvpObjectsCount: Integer; ppRsvpObjects: PPRsvpObjHdr): ULONG; stdcall; + {$EXTERNALSYM CBGETRSVPOBJECTS} + TCbGetRsvpObjects = CBGETRSVPOBJECTS; + +// The above 2 call backs can return the following errors + +const + INV_LPM_HANDLE = 1; // Supplied LpmHandle is invalid + {$EXTERNALSYM INV_LPM_HANDLE} + LPM_TIME_OUT = 2; // LPM has returned results after the time limit + {$EXTERNALSYM LPM_TIME_OUT} + INV_REQ_HANDLE = 3; // Supplied Request handle is invalid + {$EXTERNALSYM INV_REQ_HANDLE} + DUP_RESULTS = 4; // LPM has already returned results for this request + {$EXTERNALSYM DUP_RESULTS} + INV_RESULTS = 5; // Results supplied are invalid + {$EXTERNALSYM INV_RESULTS} + +type + lpminitinfo = record + PcmVersionNumber: DWORD; + ResultTimeLimit: DWORD; + ConfiguredLpmCount: Integer; + AllocMemory: PALLOCMEM; + FreeMemory: PFREEMEM; + PcmAdmitResultCallback: CBADMITRESULT; + GetRsvpObjectsCallback: CBGETRSVPOBJECTS; + end; + {$EXTERNALSYM lpminitinfo} + LPM_INIT_INFO = lpminitinfo; + {$EXTERNALSYM LPM_INIT_INFO} + TLpmInitInfo = LPM_INIT_INFO; + PLpmInitInfo = ^LPM_INIT_INFO; + +// Valid PE types +// XXX ISSUE - Is 0xFFFF a better choice? + +const + LPM_PE_ALL_TYPES = 0; + {$EXTERNALSYM LPM_PE_ALL_TYPES} + +// Current LPM API version number + + LPM_API_VERSION_1 = 1; + {$EXTERNALSYM LPM_API_VERSION_1} + +// Current PCM version number + + PCM_VERSION_1 = 1; + {$EXTERNALSYM PCM_VERSION_1} + +function LPM_Initialize(LpmHandle: LPM_HANDLE; const pLpmInitInfo: LPM_INIT_INFO; + var pLpmVersionNumber: DWORD; var pSupportedPeType: PETYPE; Reserved: Pointer): ULONG; stdcall; +{$EXTERNALSYM LPM_Initialize} + +(************************************** + + LPM_Deinitialize + +***************************************) + +function LPM_Deinitialize(LpmHandle: LPM_HANDLE): ULONG; stdcall; +{$EXTERNALSYM LPM_Deinitialize} + +(************************************** + + LPM_AdmitRsvpMsg + +***************************************) + +// Valid LPV - LPM Priority Values + +const + LPV_RESERVED = 0; + {$EXTERNALSYM LPV_RESERVED} + LPV_MIN_PRIORITY = 1; + {$EXTERNALSYM LPV_MIN_PRIORITY} + LPV_MAX_PRIORITY = $FF00; + {$EXTERNALSYM LPV_MAX_PRIORITY} + LPV_DROP_MSG = $FFFD; + {$EXTERNALSYM LPV_DROP_MSG} + LPV_DONT_CARE = $FFFE; + {$EXTERNALSYM LPV_DONT_CARE} + LPV_REJECT = $FFFF; + {$EXTERNALSYM LPV_REJECT} + +// Valid values for PcmActionFlags + + FORCE_IMMEDIATE_REFRESH = 1; + {$EXTERNALSYM FORCE_IMMEDIATE_REFRESH} + +// Function return values for LPM_AdmitResvMsg + + LPM_RESULT_READY = 0; + {$EXTERNALSYM LPM_RESULT_READY} + LPM_RESULT_DEFER = 1; + {$EXTERNALSYM LPM_RESULT_DEFER} + +function LPM_AdmitRsvpMsg(PcmReqHandle: RHANDLE; const pRecvdIntf: RSVP_HOP; + const pRsvpMsgObjs: RSVP_MSG_OBJS; RcvdRsvpMsgLength: Integer; RcvdRsvpMsg: PUCHAR; + var pulPcmActionFlags: ULONG; pPolicyDecisions: PPolicyDecision; Reserved: Pointer): ULONG; stdcall; +{$EXTERNALSYM LPM_AdmitRsvpMsg} + +(************************************** + + LPM_GetRsvpObjects + +***************************************) + +// Function return values are defined in LPM_AdmitResvMsg section + +function LPM_GetRsvpObjects(PcmReqHandle: RHANDLE; MaxPdSize: ULONG; + SendingIntfAddr: PRsvpHop; pRsvpMsgObjs: PRsvpMsgObjs; var pRsvpObjectsCount: Integer; + var pppRsvpObjects: PRsvpObjHdr; Reserved: Pointer): ULONG; stdcall; +{$EXTERNALSYM LPM_GetRsvpObjects} + +(************************************** + + LPM_DeleteState + +***************************************) + +// TearDown reasons + +const + RCVD_PATH_TEAR = 1; + {$EXTERNALSYM RCVD_PATH_TEAR} + RCVD_RESV_TEAR = 2; + {$EXTERNALSYM RCVD_RESV_TEAR} + ADM_CTRL_FAILED = 3; + {$EXTERNALSYM ADM_CTRL_FAILED} + STATE_TIMEOUT = 4; + {$EXTERNALSYM STATE_TIMEOUT} + FLOW_DURATION = 5; + {$EXTERNALSYM FLOW_DURATION} + +procedure LPM_DeleteState(pRcvdIfAddr: PRsvpHop; RsvpMsgType: TMsgType; + pRsvpSession: PRsvpSession; pRsvpFromHop: PRsvpHop; pResvStyle: PResvStyle; + FilterSpecCount: Integer; ppFilterSpecList: PFilterSpec; TearDownReason: Integer); stdcall; +{$EXTERNALSYM LPM_DeleteState} + +(************************************** + + LPM_IpAddrTable + +***************************************) + +type + lpmiptable = record + ulIfIndex: ULONG; // SNMP index for this interface + MediaType: ULONG; // As defined in IPIFCONS.H + IfIpAddr: IN_ADDR; // Interface IP address + IfNetMask: IN_ADDR; // Interface subnet mask + end; + {$EXTERNALSYM lpmiptable} + TLpmIpTable = lpmiptable; + PLpmIpTable = ^lpmiptable; + +function LPM_IpAddressTable(cIpAddrTable: ULONG; pIpAddrTable: PLpmIpTable): BOOL; stdcall; +{$EXTERNALSYM LPM_IpAddressTable} + +(************************************** + + LPM_CommitResv + +***************************************) + +// CommitDecision values + +const + RESOURCES_ALLOCATED = 1; + {$EXTERNALSYM RESOURCES_ALLOCATED} + RESOURCES_MODIFIED = 2; + {$EXTERNALSYM RESOURCES_MODIFIED} + +procedure LPM_CommitResv(RsvpSession: PRsvpSession; FlowInstalledIntf: PRsvpHop; + RsvpStyle: PResvStyle; FilterSpecCount: Integer; ppFilterSpecList: PFilterSpec; + pMergedFlowSpec: PIsFlowSpec; CommitDecision: ULONG); stdcall; +{$EXTERNALSYM LPM_CommitResv} + +implementation + +const + lpmlib = 'msidlpm.dll'; + +function ObjLength(const x: TRsvpObjHdr): USHORT; +begin + Result := x.obj_length; +end; + +function ObjCType(const x: TRsvpObjHdr): UCHAR; +begin + Result := x.obj_ctype; +end; + +function ObjClass(const x: TRsvpObjHdr): UCHAR; +begin + Result := x.obj_class; +end; + +function ObjData(const x: TRsvpObjHdr): Pointer; +begin + Result := Pointer(Integer(@x) + SizeOf(x)); +end; + +function Style_is_Wildcard(p: DWORD): Boolean; +begin + Result := (p and Opt_SndSel_mask) = Opt_Wildcard; +end; + +function Style_is_Shared(p: DWORD): Boolean; +begin + Result := (p and Opt_Share_mask) = Opt_Shared; +end; + +function Error_Usage(x: DWORD): DWORD; +begin + Result := (x shr 12) and 3; +end; + +function Intserv_Version(x: DWORD): DWORD; +begin + Result := (x and INTSERV_VERS_MASK) shr 4; +end; + +function Intserv_Version_OK(const x: TIntServMainHdr): Boolean; +begin + Result := (x.ismh_version and INTSERV_VERS_MASK) = INTSERV_VERSION0; +end; + +function Intserv_Obj_size(const x: TIntServMainHdr): DWORD; +begin + Result := x.ismh_len32b * 4 + SizeOf(IntServMainHdr) + SizeOf(RsvpObjHdr); +end; + +function Issh_len32b(const p: TIntServServiceHdr): USHORT; +begin + Result := p.issh_len32b; +end; + +{$IFDEF DYNAMIC_LINK} + +var + _LPM_Initialize: Pointer; + +function LPM_Initialize; +begin + GetProcedureAddress(_LPM_Initialize, lpmlib, 'LPM_Initialize'); + asm + MOV ESP, EBP + POP EBP + JMP [_LPM_Initialize] + end; +end; + +var + _LPM_Deinitialize: Pointer; + +function LPM_Deinitialize; +begin + GetProcedureAddress(_LPM_Deinitialize, lpmlib, 'LPM_Deinitialize'); + asm + MOV ESP, EBP + POP EBP + JMP [_LPM_Deinitialize] + end; +end; + +var + _LPM_AdmitRsvpMsg: Pointer; + +function LPM_AdmitRsvpMsg; +begin + GetProcedureAddress(_LPM_AdmitRsvpMsg, lpmlib, 'LPM_AdmitRsvpMsg'); + asm + MOV ESP, EBP + POP EBP + JMP [_LPM_AdmitRsvpMsg] + end; +end; + +var + _LPM_GetRsvpObjects: Pointer; + +function LPM_GetRsvpObjects; +begin + GetProcedureAddress(_LPM_GetRsvpObjects, lpmlib, 'LPM_GetRsvpObjects'); + asm + MOV ESP, EBP + POP EBP + JMP [_LPM_GetRsvpObjects] + end; +end; + +var + _LPM_DeleteState: Pointer; + +procedure LPM_DeleteState; +begin + GetProcedureAddress(_LPM_DeleteState, lpmlib, 'LPM_DeleteState'); + asm + MOV ESP, EBP + POP EBP + JMP [_LPM_DeleteState] + end; +end; + +var + _LPM_IpAddressTable: Pointer; + +function LPM_IpAddressTable; +begin + GetProcedureAddress(_LPM_IpAddressTable, lpmlib, 'LPM_IpAddressTable'); + asm + MOV ESP, EBP + POP EBP + JMP [_LPM_IpAddressTable] + end; +end; + +var + _LPM_CommitResv: Pointer; + +procedure LPM_CommitResv; +begin + GetProcedureAddress(_LPM_CommitResv, lpmlib, 'LPM_CommitResv'); + asm + MOV ESP, EBP + POP EBP + JMP [_LPM_CommitResv] + end; +end; + +{$ELSE} + +function LPM_Initialize; external lpmlib name 'LPM_Initialize'; +function LPM_Deinitialize; external lpmlib name 'LPM_Deinitialize'; +function LPM_AdmitRsvpMsg; external lpmlib name 'LPM_AdmitRsvpMsg'; +function LPM_GetRsvpObjects; external lpmlib name 'LPM_GetRsvpObjects'; +procedure LPM_DeleteState; external lpmlib name 'LPM_DeleteState'; +function LPM_IpAddressTable; external lpmlib name 'LPM_IpAddressTable'; +procedure LPM_CommitResv; external lpmlib name 'LPM_CommitResv'; + +{$ENDIF DYNAMIC_LINK} + +end. |