jwalpmapi.pas 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677
  1. {******************************************************************************}
  2. { }
  3. { Winsock2 RSVP/LPM API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: lpmapi.h, released June 2000. The original Pascal }
  9. { code is: LpmApi.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. // $Id: JwaLpmApi.pas,v 1.10 2007/09/05 11:58:51 dezipaitor Exp $
  43. {$IFNDEF JWA_OMIT_SECTIONS}
  44. unit JwaLpmApi;
  45. {$WEAKPACKAGEUNIT}
  46. {$ENDIF JWA_OMIT_SECTIONS}
  47. {$HPPEMIT ''}
  48. {$HPPEMIT '#include "lpmapi.h"'}
  49. {$HPPEMIT ''}
  50. {$IFNDEF JWA_OMIT_SECTIONS}
  51. {$I jediapilib.inc}
  52. interface
  53. uses
  54. JwaWinSock2, JwaWinType;
  55. {$ENDIF JWA_OMIT_SECTIONS}
  56. {$IFNDEF JWA_IMPLEMENTATIONSECTION}
  57. {$IFNDEF JWA_INCLUDEMODE}
  58. type
  59. FLOAT = Single;
  60. {$NODEFINE FLOAT}
  61. {$ENDIF JWA_INCLUDEMODE}
  62. (****************************************************************************
  63. RSVPD -- ReSerVation Protocol Daemon
  64. USC Information Sciences Institute
  65. Marina del Rey, California
  66. Original Version: Shai Herzog, Nov. 1993.
  67. Current Version: Steven Berson & Bob Braden, may 1996.
  68. Copyright (c) 1996 by the University of Southern California
  69. All rights reserved.
  70. Permission to use, copy, modify, and distribute this software and its
  71. documentation in source and binary forms for any purpose and without
  72. fee is hereby granted, provided that both the above copyright notice
  73. and this permission notice appear in all copies, and that any
  74. documentation, advertising materials, and other materials related to
  75. such distribution and use acknowledge that the software was developed
  76. in part by the University of Southern California, Information
  77. Sciences Institute. The name of the University may not be used to
  78. endorse or promote products derived from this software without
  79. specific prior written permission.
  80. THE UNIVERSITY OF SOUTHERN CALIFORNIA makes no representations about
  81. the suitability of this software for any purpose. THIS SOFTWARE IS
  82. PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
  83. INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  84. MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  85. Other copyrights might apply to parts of this software and are so
  86. noted when applicable.
  87. ********************************************************************)
  88. (*
  89. * Standard format of an RSVP object header
  90. *)
  91. type
  92. RsvpObjHdr = record
  93. obj_length: USHORT; (* Length in bytes *)
  94. obj_class: UCHAR; (* Class (values defined below) *)
  95. obj_ctype: UCHAR; (* C-Type (values defined below) *)
  96. end;
  97. {$EXTERNALSYM RsvpObjHdr}
  98. TRsvpObjHdr = RsvpObjHdr;
  99. PRsvpObjHdr = ^RsvpObjHdr;
  100. PPRsvpObjHdr = ^PRsvpObjHdr;
  101. function ObjLength(const x: TRsvpObjHdr): USHORT;
  102. {$EXTERNALSYM ObjLength}
  103. function ObjCType(const x: TRsvpObjHdr): UCHAR;
  104. {$EXTERNALSYM ObjCType}
  105. function ObjClass(const x: TRsvpObjHdr): UCHAR;
  106. {$EXTERNALSYM ObjClass}
  107. function ObjData(const x: TRsvpObjHdr): Pointer;
  108. {$EXTERNALSYM ObjData}
  109. (*
  110. * Define object classes: Class-Num values
  111. *)
  112. const
  113. class_NULL = 0;
  114. {$EXTERNALSYM class_NULL}
  115. class_SESSION = 1;
  116. {$EXTERNALSYM class_SESSION}
  117. class_SESSION_GROUP = 2;
  118. {$EXTERNALSYM class_SESSION_GROUP}
  119. class_RSVP_HOP = 3;
  120. {$EXTERNALSYM class_RSVP_HOP}
  121. class_INTEGRITY = 4;
  122. {$EXTERNALSYM class_INTEGRITY}
  123. class_TIME_VALUES = 5;
  124. {$EXTERNALSYM class_TIME_VALUES}
  125. class_ERROR_SPEC = 6;
  126. {$EXTERNALSYM class_ERROR_SPEC}
  127. class_SCOPE = 7;
  128. {$EXTERNALSYM class_SCOPE}
  129. class_STYLE = 8;
  130. {$EXTERNALSYM class_STYLE}
  131. class_FLOWSPEC = 9; // these two are the same
  132. {$EXTERNALSYM class_FLOWSPEC}
  133. class_IS_FLOWSPEC = 9; // since we added IS in front of the name
  134. {$EXTERNALSYM class_IS_FLOWSPEC}
  135. class_FILTER_SPEC = 10;
  136. {$EXTERNALSYM class_FILTER_SPEC}
  137. class_SENDER_TEMPLATE = 11;
  138. {$EXTERNALSYM class_SENDER_TEMPLATE}
  139. class_SENDER_TSPEC = 12;
  140. {$EXTERNALSYM class_SENDER_TSPEC}
  141. class_ADSPEC = 13;
  142. {$EXTERNALSYM class_ADSPEC}
  143. class_POLICY_DATA = 14;
  144. {$EXTERNALSYM class_POLICY_DATA}
  145. class_CONFIRM = 15;
  146. {$EXTERNALSYM class_CONFIRM}
  147. class_MAX = 15;
  148. {$EXTERNALSYM class_MAX}
  149. (*
  150. * RSVP SESSION object
  151. *)
  152. ctype_SESSION_ipv4 = 1;
  153. {$EXTERNALSYM ctype_SESSION_ipv4}
  154. ctype_SESSION_ipv4GPI = 3 (* IPSEC: Generalized Port Id *);
  155. {$EXTERNALSYM ctype_SESSION_ipv4GPI}
  156. SESSFLG_E_Police = $01 (* E_Police: Entry policing flag*);
  157. {$EXTERNALSYM SESSFLG_E_Police}
  158. type
  159. Session_IPv4 = record
  160. sess_destaddr: IN_ADDR; // DestAddress
  161. sess_protid: UCHAR; // Protocol Id
  162. sess_flags: UCHAR; // Use the flags defined above
  163. sess_destport: USHORT; // DestPort
  164. end;
  165. {$EXTERNALSYM Session_IPv4}
  166. TSessionIPv4 = Session_IPv4;
  167. PSessionIPv4 = ^Session_IPv4;
  168. (* GPI versions have virtual dest port instead of dest port; this
  169. * changes the interpretation but not the format, so we do not
  170. * define new structs for GPI.
  171. *)
  172. RSVP_SESSION = record
  173. sess_header: RsvpObjHdr;
  174. case Integer of
  175. 0: (sess_ipv4: Session_IPv4);
  176. end;
  177. {$EXTERNALSYM RSVP_SESSION}
  178. TRsvpSession = RSVP_SESSION;
  179. PRsvpSession = ^RSVP_SESSION;
  180. // Useful defines to access components of SESSION obect
  181. //#define Sess4Addr sess_u.sess_ipv4.sess_destaddr
  182. //#define Sess4Port sess_u.sess_ipv4.sess_destport
  183. //#define Sess4Protocol sess_u.sess_ipv4.sess_protid
  184. //#define Sess4Flags sess_u.sess_ipv4.sess_flags
  185. (*
  186. * RSVP HOP object
  187. *)
  188. const
  189. ctype_RSVP_HOP_ipv4 = 1;
  190. {$EXTERNALSYM ctype_RSVP_HOP_ipv4}
  191. type
  192. Rsvp_Hop_IPv4 = record
  193. hop_ipaddr: IN_ADDR; // Next/Previous Hop Address
  194. hop_LIH: ULONG; // Logical Interface Handle
  195. end;
  196. {$EXTERNALSYM Rsvp_Hop_IPv4}
  197. TRsvpHopIPv4 = Rsvp_Hop_IPv4;
  198. PRsvpHopIPv4 = ^Rsvp_Hop_IPv4;
  199. RSVP_HOP = record
  200. hop_header: RsvpObjHdr;
  201. case Integer of
  202. 0: (hop_ipv4: Rsvp_Hop_IPv4);
  203. end;
  204. {$EXTERNALSYM RSVP_HOP}
  205. TRsvpHop = RSVP_HOP;
  206. PRsvpHop = ^RSVP_HOP;
  207. //#define Hop4LIH hop_u.hop_ipv4.hop_LIH
  208. //#define Hop4Addr hop_u.hop_ipv4.hop_ipaddr
  209. (*
  210. * RSVP STYLE object
  211. *)
  212. // Define values for option vector
  213. const
  214. Opt_Share_mask = $00000018; // 2 bits: Sharing control
  215. {$EXTERNALSYM Opt_Share_mask}
  216. Opt_Distinct = $00000008; // Distinct reservations
  217. {$EXTERNALSYM Opt_Distinct}
  218. Opt_Shared = $00000010; // Shared reservations
  219. {$EXTERNALSYM Opt_Shared}
  220. Opt_SndSel_mask = $00000007; // 3 bits: Sender selection
  221. {$EXTERNALSYM Opt_SndSel_mask}
  222. Opt_Wildcard = $00000001; // Wildcard scope
  223. {$EXTERNALSYM Opt_Wildcard}
  224. Opt_Explicit = $00000002; // Explicit scope
  225. {$EXTERNALSYM Opt_Explicit}
  226. function Style_is_Wildcard(p: DWORD): Boolean;
  227. {$EXTERNALSYM Style_is_Wildcard}
  228. function Style_is_Shared(p: DWORD): Boolean;
  229. {$EXTERNALSYM Style_is_Shared}
  230. // Define style values
  231. const
  232. STYLE_WF = Opt_Shared + Opt_Wildcard;
  233. {$EXTERNALSYM STYLE_WF}
  234. STYLE_FF = Opt_Distinct + Opt_Explicit;
  235. {$EXTERNALSYM STYLE_FF}
  236. STYLE_SE = Opt_Shared + Opt_Explicit;
  237. {$EXTERNALSYM STYLE_SE}
  238. ctype_STYLE = 1;
  239. {$EXTERNALSYM ctype_STYLE}
  240. type
  241. RESV_STYLE = record
  242. style_header: RsvpObjHdr;
  243. style_word: ULONG;
  244. end;
  245. {$EXTERNALSYM RESV_STYLE}
  246. TResvStyle = RESV_STYLE;
  247. PResvStyle = ^RESV_STYLE;
  248. (*
  249. * RSVP FILTER SPEC object
  250. *)
  251. const
  252. ctype_FILTER_SPEC_ipv4 = 1; // IPv4 FILTER_SPEC
  253. {$EXTERNALSYM ctype_FILTER_SPEC_ipv4}
  254. ctype_FILTER_SPEC_ipv4GPI = 4; // IPv4/GPI FILTER_SPEC
  255. {$EXTERNALSYM ctype_FILTER_SPEC_ipv4GPI}
  256. type
  257. Filter_Spec_IPv4 = record
  258. filt_ipaddr: IN_ADDR; // IPv4 SrcAddress
  259. filt_unused: USHORT;
  260. filt_port: USHORT; // SrcPort
  261. end;
  262. {$EXTERNALSYM Filter_Spec_IPv4}
  263. TFilterSpecIPv4 = Filter_Spec_IPv4;
  264. PFilterSpecIPv4 = ^Filter_Spec_IPv4;
  265. Filter_Spec_IPv4GPI = record
  266. filt_ipaddr: IN_ADDR; // IPv4 SrcAddress
  267. filt_gpi: ULONG; // Generalized Port Id
  268. end;
  269. {$EXTERNALSYM Filter_Spec_IPv4GPI}
  270. TFilterSpecIPv4GPI = Filter_Spec_IPv4GPI;
  271. PFilterSpecIPv4GPI = ^Filter_Spec_IPv4GPI;
  272. FILTER_SPEC = record
  273. filt_header: RsvpObjHdr;
  274. case Integer of
  275. 0: (filt_ipv4: Filter_Spec_IPv4);
  276. 1: (filt_ipv4gpi: Filter_Spec_IPv4GPI);
  277. end;
  278. {$EXTERNALSYM FILTER_SPEC}
  279. TFilterSpec = FILTER_SPEC;
  280. PFilterSpec = ^FILTER_SPEC;
  281. //#define FilterSrcaddr filt_u.filt_ipv4.filt_ipaddr
  282. //#define FilterSrcport filt_u.filt_ipv4.filt_port
  283. (*
  284. * RSVP SENDER_TEMPLATE object
  285. *)
  286. const
  287. ctype_SENDER_TEMPLATE_ipv4 = 1; // IPv4 SENDER_TEMPLATE
  288. {$EXTERNALSYM ctype_SENDER_TEMPLATE_ipv4}
  289. ctype_SENDER_TEMPLATE_ipv4GPI = 4; // IPv4/GPI SENDER_TEMPLATE
  290. {$EXTERNALSYM ctype_SENDER_TEMPLATE_ipv4GPI}
  291. type
  292. SENDER_TEMPLATE = FILTER_SPEC; // Identical to FILTER_SPEC
  293. {$EXTERNALSYM SENDER_TEMPLATE}
  294. TSenderTemplate = SENDER_TEMPLATE;
  295. PSenderTemplate = ^SENDER_TEMPLATE;
  296. (*
  297. * RSVP SCOPE object class
  298. *)
  299. const
  300. ctype_SCOPE_list_ipv4 = 1;
  301. {$EXTERNALSYM ctype_SCOPE_list_ipv4}
  302. type
  303. Scope_list_ipv4 = record
  304. scopl_ipaddr: array [0..0] of IN_ADDR; // var-len list of IP sender addrs
  305. end;
  306. {$EXTERNALSYM Scope_list_ipv4}
  307. TScopeListIPv4 = Scope_list_ipv4;
  308. PScopeListIPv4 = ^Scope_list_ipv4;
  309. RSVP_SCOPE = record
  310. scopl_header: RsvpObjHdr;
  311. case Integer of
  312. 0: (scopl_ipv4: Scope_list_ipv4);
  313. end;
  314. {$EXTERNALSYM RSVP_SCOPE}
  315. TRsvpScope = RSVP_SCOPE;
  316. PRsvpScope = ^RSVP_SCOPE;
  317. //#define Scope4Addr scope_u.scopl_ipv4.scopl_ipaddr
  318. //#define ScopeCnt(scp) ((ObjLength(scp)-sizeof(RsvpObjHdr))/sizeof(struct in_addr))
  319. //#define ScopeLen(cnt) (cnt*sizeof(struct in_addr)+sizeof(RsvpObjHdr))
  320. (*
  321. * ERROR_SPEC object class
  322. *)
  323. const
  324. ctype_ERROR_SPEC_ipv4 = 1;
  325. {$EXTERNALSYM ctype_ERROR_SPEC_ipv4}
  326. ERROR_SPECF_InPlace = $01; (* Left resv in place *)
  327. {$EXTERNALSYM ERROR_SPECF_InPlace}
  328. ERROR_SPECF_NotGuilty = $02; (* This rcvr not guilty *)
  329. {$EXTERNALSYM ERROR_SPECF_NotGuilty}
  330. ERR_FORWARD_OK = $8000; (* Flag: OK to forward state *)
  331. {$EXTERNALSYM ERR_FORWARD_OK}
  332. function Error_Usage(x: DWORD): DWORD;
  333. {$EXTERNALSYM Error_Usage}
  334. const
  335. ERR_Usage_globl = $00; (* Globally-defined sub-code *)
  336. {$EXTERNALSYM ERR_Usage_globl}
  337. ERR_Usage_local = $10; (* Locally-defined sub-code *)
  338. {$EXTERNALSYM ERR_Usage_local}
  339. ERR_Usage_serv = $11; (* Service-defined sub-code *)
  340. {$EXTERNALSYM ERR_Usage_serv}
  341. ERR_global_mask = $0fff; (* Sub-code bits in Error Val *)
  342. {$EXTERNALSYM ERR_global_mask}
  343. type
  344. Error_Spec_IPv4 = record
  345. errs_errnode: in_addr; (* Error Node Address *)
  346. errs_flags: u_char; (* Flags: *)
  347. errs_code: UCHAR; (* Error Code (def'd below) *)
  348. errs_value: USHORT; (* Error Value *)
  349. end;
  350. {$EXTERNALSYM Error_Spec_IPv4}
  351. TErrorSpecIPv4 = Error_Spec_IPv4;
  352. PErrorSpecIPv4 = ^Error_Spec_IPv4;
  353. type
  354. ERROR_SPEC = record
  355. errs_header: RsvpObjHdr;
  356. case Integer of
  357. 0: (errs_ipv4: Error_Spec_IPv4);
  358. end;
  359. {$EXTERNALSYM ERROR_SPEC}
  360. TErrorSpec = ERROR_SPEC;
  361. PErrorSpec = ^ERROR_SPEC;
  362. //#define errspec4_enode errs_u.errs_ipv4.errs_errnode
  363. //#define errspec4_code errs_u.errs_ipv4.errs_code
  364. //#define errspec4_value errs_u.errs_ipv4.errs_value
  365. //#define errspec4_flags errs_u.errs_ipv4.errs_flags
  366. (*
  367. * POLICY_DATA object class
  368. *
  369. * Contents are Opaque RSVP/SBM
  370. *)
  371. const
  372. ctype_POLICY_DATA = 1;
  373. {$EXTERNALSYM ctype_POLICY_DATA}
  374. type
  375. POLICY_DATA = record
  376. PolicyObjHdr: RsvpObjHdr;
  377. usPeOffset: USHORT; // Offset to the start of Policy Elements from the begining of Policy Data
  378. usReserved: USHORT;
  379. end;
  380. {$EXTERNALSYM POLICY_DATA}
  381. TPolicyData = POLICY_DATA;
  382. PPolicyData = ^POLICY_DATA;
  383. const
  384. PD_HDR_LEN = SizeOf(POLICY_DATA);
  385. {$EXTERNALSYM PD_HDR_LEN}
  386. type
  387. POLICY_ELEMENT = record
  388. usPeLength: USHORT; // Policy Element length
  389. usPeType: USHORT; // Policy Element type
  390. ucPeData: array [0..3] of UCHAR; // Just a place holder to the start of Policy Element data
  391. end;
  392. {$EXTERNALSYM POLICY_ELEMENT}
  393. TPolicyElement = POLICY_ELEMENT;
  394. PPolicyElement = ^POLICY_ELEMENT;
  395. const
  396. PE_HDR_LEN = 2 * SizeOf(USHORT);
  397. {$EXTERNALSYM PE_HDR_LEN}
  398. (**************************************************************************
  399. *
  400. * Int-Serv Data Structures
  401. *
  402. **************************************************************************)
  403. (*
  404. * Service numbers
  405. *)
  406. const
  407. GENERAL_INFO = 1;
  408. {$EXTERNALSYM GENERAL_INFO}
  409. GUARANTEED_SERV = 2;
  410. {$EXTERNALSYM GUARANTEED_SERV}
  411. PREDICTIVE_SERV = 3;
  412. {$EXTERNALSYM PREDICTIVE_SERV}
  413. CONTROLLED_DELAY_SERV = 4;
  414. {$EXTERNALSYM CONTROLLED_DELAY_SERV}
  415. CONTROLLED_LOAD_SERV = 5;
  416. {$EXTERNALSYM CONTROLLED_LOAD_SERV}
  417. QUALITATIVE_SERV = 6;
  418. {$EXTERNALSYM QUALITATIVE_SERV}
  419. (*
  420. * Well-known parameter IDs
  421. *)
  422. const
  423. IS_WKP_HOP_CNT = 4;
  424. {$EXTERNALSYM IS_WKP_HOP_CNT}
  425. IS_WKP_PATH_BW = 6;
  426. {$EXTERNALSYM IS_WKP_PATH_BW}
  427. IS_WKP_MIN_LATENCY = 8;
  428. {$EXTERNALSYM IS_WKP_MIN_LATENCY}
  429. IS_WKP_COMPOSED_MTU = 10;
  430. {$EXTERNALSYM IS_WKP_COMPOSED_MTU}
  431. IS_WKP_TB_TSPEC = 127; (* Token-bucket TSPEC parm *)
  432. {$EXTERNALSYM IS_WKP_TB_TSPEC}
  433. IS_WKP_Q_TSPEC = 128;
  434. {$EXTERNALSYM IS_WKP_Q_TSPEC}
  435. type
  436. int_serv_wkp = DWORD;
  437. {$EXTERNALSYM int_serv_wkp}
  438. TIntServWkp = int_serv_wkp;
  439. (*
  440. * Int-serv Main header
  441. *)
  442. IntServMainHdr = record
  443. ismh_version: UCHAR; // Version
  444. ismh_unused: UCHAR;
  445. ismh_len32b: USHORT; // # 32-bit words excluding this hdr
  446. end;
  447. {$EXTERNALSYM IntServMainHdr}
  448. TIntServMainHdr = IntServMainHdr;
  449. PIntServMainHdr = ^IntServMainHdr;
  450. const
  451. INTSERV_VERS_MASK = $f0;
  452. {$EXTERNALSYM INTSERV_VERS_MASK}
  453. INTSERV_VERSION0 = 0;
  454. {$EXTERNALSYM INTSERV_VERSION0}
  455. function Intserv_Version(x: DWORD): DWORD;
  456. {$EXTERNALSYM Intserv_Version}
  457. function Intserv_Version_OK(const x: TIntServMainHdr): Boolean;
  458. {$EXTERNALSYM Intserv_Version_OK}
  459. // Convert ishm_length to equivalent RSVP object size, for checking
  460. function Intserv_Obj_size(const x: TIntServMainHdr): DWORD;
  461. {$EXTERNALSYM Intserv_Obj_size}
  462. (*
  463. * Int-serv Service Element Header
  464. *)
  465. // Flag: Break bit
  466. const
  467. ISSH_BREAK_BIT = $80;
  468. {$EXTERNALSYM ISSH_BREAK_BIT}
  469. type
  470. IntServServiceHdr = record
  471. issh_service: UCHAR; // Service number
  472. issh_flags: UCHAR; // Flag byte
  473. issh_len32b: USHORT; // #32-bit words excluding this hdr
  474. end;
  475. {$EXTERNALSYM IntServServiceHdr}
  476. TIntServServiceHdr = IntServServiceHdr;
  477. PIntServServiceHdr = ^IntServServiceHdr;
  478. function Issh_len32b(const p: TIntServServiceHdr): USHORT;
  479. {$EXTERNALSYM Issh_len32b}
  480. (*
  481. * Int-serv Parameter Element Header
  482. *)
  483. const
  484. ISPH_FLG_INV = $80; // Flag: Invalid
  485. {$EXTERNALSYM ISPH_FLG_INV}
  486. type
  487. IntServParmHdr = record
  488. isph_parm_num: UCHAR; // Parameter number
  489. isph_flags: UCHAR; // Flags
  490. isph_len32b: USHORT; // #32-bit words excluding this hdr
  491. end;
  492. {$EXTERNALSYM IntServParmHdr}
  493. TIntServParmHdr = IntServParmHdr;
  494. PIntServParmHdr = ^IntServParmHdr;
  495. {
  496. function Next_Main_Hdr(const p: TIntServMainHdr): PIntServMainHdr;
  497. begin
  498. TODO (IntServMainHdr *)((ULONG *)(p)+1+(p)->ismh_len32b)
  499. end;
  500. function Next_Serv_Hdr(const p: TIntServMainHdr): ULONG;
  501. begin
  502. TODO (IntServServiceHdr *)((ULONG *)(p)+1+(p)->issh_len32b)
  503. end;
  504. function Next_Parm_Hdr(const p: TIntServParmHdr): ULONG;
  505. begin
  506. TODO (IntServParmHdr *)((ULONG *)(p)+1+(p)->isph_len32b)
  507. end;
  508. }
  509. (*
  510. * Generic Tspec Parameters
  511. *)
  512. type
  513. GenTspecParms = record
  514. TB_Tspec_r: FLOAT; // Token bucket rate (B/sec)
  515. TB_Tspec_b: FLOAT; // Token bucket depth (B)
  516. TB_Tspec_p: FLOAT; // Peak data rate (B/sec)
  517. TB_Tspec_m: ULONG; // Min Policed Unit (B)
  518. TB_Tspec_M_: ULONG; // Max pkt size (B)
  519. end;
  520. {$EXTERNALSYM GenTspecParms}
  521. TGenTspecParms = GenTspecParms;
  522. PGenTspecParms = ^GenTspecParms;
  523. (*
  524. * Generic Tspec
  525. *)
  526. GenTspec = record
  527. gen_Tspec_serv_hdr: IntServServiceHdr; // (GENERAL_INFO, length)
  528. gen_Tspec_parm_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC)
  529. gen_Tspec_parms: GenTspecParms;
  530. end;
  531. {$EXTERNALSYM GenTspec}
  532. TGenTspec = GenTspec;
  533. PGenTspec = ^GenTspec;
  534. //#define gtspec_r gen_Tspec_parms.TB_Tspec_r
  535. //#define gtspec_b gen_Tspec_parms.TB_Tspec_b
  536. //#define gtspec_m gen_Tspec_parms.TB_Tspec_m
  537. //#define gtspec_M gen_Tspec_parms.TB_Tspec_M
  538. //#define gtspec_p gen_Tspec_parms.TB_Tspec_p
  539. //#define gtspec_parmno gen_Tspec_parm_hdr.isph_parm_num
  540. //#define gtspec_flags gen_Tspec_parm_hdr.isph_flags
  541. //#define gtspec_len (sizeof(GenTspec) - sizeof(IntServServiceHdr))
  542. (* contents of qualitative tspec *)
  543. type
  544. QualTspecParms = record
  545. TB_Tspec_M: ULONG; // Max pkt size (M)
  546. end;
  547. {$EXTERNALSYM QualTspecParms}
  548. TQualTspecParms = QualTspecParms;
  549. PQualTspecParms = ^QualTspecParms;
  550. QualTspec = record
  551. qual_Tspec_serv_hdr: IntServServiceHdr; // (QUALITATIVE_SERV, length)
  552. qual_Tspec_parm_hdr: IntServParmHdr; // (IS_WKP_Q_TSPEC)
  553. qual_Tspec_parms: QualTspecParms;
  554. end;
  555. {$EXTERNALSYM QualTspec}
  556. TQualTspec = QualTspec;
  557. PQualTspec = ^QualTspec;
  558. QualAppFlowSpec = record
  559. Q_spec_serv_hdr: IntServServiceHdr; // (QUALITATIVE_SERV,0,len)
  560. Q_spec_parm_hdr: IntServParmHdr; // (IS_WKP_Q_TSPEC)
  561. Q_spec_parms: QualTspecParms; // QUALITATIVE Tspec parameters
  562. end;
  563. {$EXTERNALSYM QualAppFlowSpec}
  564. TQualAppFlowSpec = QualAppFlowSpec;
  565. PQualAppFlowSpec = ^QualAppFlowSpec;
  566. //#define QAspec_M Q_spec_parms.TB_Tspec_M
  567. (*
  568. * Contents of int-serv Tspec
  569. *)
  570. IntServTspecBody = record
  571. st_mh: IntServMainHdr;
  572. case Integer of
  573. 0: (gen_stspec: GenTspec); // Generic Tspec
  574. 1: (qual_stspec: QualTspec);
  575. end;
  576. {$EXTERNALSYM IntServTspecBody}
  577. TIntServTspecBody = IntServTspecBody;
  578. PIntServTspecBody = ^IntServTspecBody;
  579. (*
  580. * SENDER_TSPEC class object
  581. *)
  582. const
  583. ctype_SENDER_TSPEC = 2;
  584. {$EXTERNALSYM ctype_SENDER_TSPEC}
  585. type
  586. SENDER_TSPEC = record
  587. stspec_header: RsvpObjHdr;
  588. stspec_body: IntServTspecBody;
  589. end;
  590. {$EXTERNALSYM SENDER_TSPEC}
  591. TSenderTSpec = SENDER_TSPEC;
  592. PSenderTSpec = ^SENDER_TSPEC;
  593. (*
  594. * Controlled-Load Flowspec
  595. *)
  596. CtrlLoadFlowspec = record
  597. CL_spec_serv_hdr: IntServServiceHdr; // (CONTROLLED_LOAD_SERV,0,len)
  598. CL_spec_parm_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC)
  599. CL_spec_parms: GenTspecParms; // GENERIC Tspec parameters
  600. end;
  601. {$EXTERNALSYM CtrlLoadFlowspec}
  602. TCtrlLoadFlowspec = CtrlLoadFlowspec;
  603. PCtrlLoadFlowspec = ^CtrlLoadFlowspec;
  604. //#define CLspec_r CL_spec_parms.TB_Tspec_r
  605. //#define CLspec_b CL_spec_parms.TB_Tspec_b
  606. //#define CLspec_p CL_spec_parms.TB_Tspec_p
  607. //#define CLspec_m CL_spec_parms.TB_Tspec_m
  608. //#define CLspec_M CL_spec_parms.TB_Tspec_M
  609. //#define CLspec_parmno CL_spec_parm_hdr.isph_parm_num
  610. //#define CLspec_flags CL_spec_parm_hdr.isph_flags
  611. //#define CLspec_len32b CL_spec_parm_hdr.isph_len32b
  612. //#define CLspec_len (sizeof(CtrlLoadFlowspec) - sizeof(IntServServiceHdr))
  613. (* Service-specific Parameter IDs
  614. *)
  615. const
  616. IS_GUAR_RSPEC = 130;
  617. {$EXTERNALSYM IS_GUAR_RSPEC}
  618. GUAR_ADSPARM_C = 131;
  619. {$EXTERNALSYM GUAR_ADSPARM_C}
  620. GUAR_ADSPARM_D = 132;
  621. {$EXTERNALSYM GUAR_ADSPARM_D}
  622. GUAR_ADSPARM_Ctot = 133;
  623. {$EXTERNALSYM GUAR_ADSPARM_Ctot}
  624. GUAR_ADSPARM_Dtot = 134;
  625. {$EXTERNALSYM GUAR_ADSPARM_Dtot}
  626. GUAR_ADSPARM_Csum = 135;
  627. {$EXTERNALSYM GUAR_ADSPARM_Csum}
  628. GUAR_ADSPARM_Dsum = 136;
  629. {$EXTERNALSYM GUAR_ADSPARM_Dsum}
  630. (*
  631. * Guaranteed Rspec parameters
  632. *)
  633. type
  634. GuarRspec = record
  635. Guar_R: FLOAT; // Guaranteed Rate B/s
  636. Guar_S: ULONG; // Slack term secs
  637. end;
  638. {$EXTERNALSYM GuarRspec}
  639. TGuarRspec = GuarRspec;
  640. PGuarRspec = ^GuarRspec;
  641. (*
  642. * Guaranteed Flowspec
  643. *)
  644. GuarFlowSpec = record
  645. Guar_serv_hdr: IntServServiceHdr; // (GUARANTEED, 0, length)
  646. Guar_Tspec_hdr: IntServParmHdr; // (IS_WKP_TB_TSPEC,)
  647. Guar_Tspec_parms: GenTspecParms; // GENERIC Tspec parms
  648. Guar_Rspec_hdr: IntServParmHdr; // (IS_GUAR_RSPEC)
  649. Guar_Rspec: GuarRspec; // Guaranteed rate (B/sec)
  650. end;
  651. {$EXTERNALSYM GuarFlowSpec}
  652. TGuarFlowSpec = GuarFlowSpec;
  653. PGuarFlowSpec = ^GuarFlowSpec;
  654. //#define Gspec_r Guar_Tspec_parms.TB_Tspec_r
  655. //#define Gspec_b Guar_Tspec_parms.TB_Tspec_b
  656. //#define Gspec_p Guar_Tspec_parms.TB_Tspec_p
  657. //#define Gspec_m Guar_Tspec_parms.TB_Tspec_m
  658. //#define Gspec_M Guar_Tspec_parms.TB_Tspec_M
  659. //#define Gspec_R Guar_Rspec.Guar_R
  660. //#define Gspec_S Guar_Rspec.Guar_S
  661. //#define Gspec_T_parmno Guar_Tspec_hdr.isph_parm_num
  662. //#define Gspec_T_flags Guar_Tspec_hdr.isph_flags
  663. //#define Gspec_R_parmno Guar_Rspec_hdr.isph_parm_num
  664. //#define Gspec_R_flags Guar_Rspec_hdr.isph_flags
  665. //#define Gspec_len (sizeof(GuarFlowSpec) - sizeof(IntServServiceHdr))
  666. (*
  667. * Contents of int-serv flowspec
  668. *)
  669. type
  670. IntServFlowSpec = record
  671. spec_mh: IntServMainHdr;
  672. case Integer of
  673. 0: (CL_spec: CtrlLoadFlowspec); // Controlled-Load service
  674. 1: (G_spec: GuarFlowSpec); // Guaranteed service
  675. 2: (Q_spec: QualAppFlowSpec);
  676. end;
  677. {$EXTERNALSYM IntServFlowSpec}
  678. TIntServFlowSpec = IntServFlowSpec;
  679. PIntServFlowSpec = ^IntServFlowSpec;
  680. //#define ISmh_len32b spec_mh.ismh_len32b
  681. //#define ISmh_version spec_mh.ismh_version
  682. //#define ISmh_unused spec_mh.ismh_unused
  683. (*
  684. * Int-Serv FLOWSPEC object
  685. *)
  686. const
  687. ctype_FLOWSPEC_Intserv0 = 2; // The int-serv flowspec (v.0)
  688. {$EXTERNALSYM ctype_FLOWSPEC_Intserv0}
  689. type
  690. IS_FLOWSPEC = record
  691. flow_header: RsvpObjHdr;
  692. flow_body: IntServFlowSpec;
  693. end;
  694. {$EXTERNALSYM IS_FLOWSPEC}
  695. TIsFlowSpec = IS_FLOWSPEC;
  696. PIsFlowSpec = ^IS_FLOWSPEC;
  697. (*
  698. * FLOW DESCRIPTOR
  699. *)
  700. FLOW_DESC = record
  701. u1: record
  702. case Integer of
  703. 0: (stspec: ^SENDER_TSPEC);
  704. 1: (isflow: ^IS_FLOWSPEC);
  705. end;
  706. u2: record
  707. case Integer of
  708. 0: (stemp: ^SENDER_TEMPLATE);
  709. 1: (fspec: ^FILTER_SPEC);
  710. end;
  711. end;
  712. {$EXTERNALSYM FLOW_DESC}
  713. TFlowDesc = FLOW_DESC;
  714. PFlowDesc = ^FLOW_DESC;
  715. //#define FdSenderTspec u1.stspec
  716. //#define FdIsFlowSpec u1.isflow
  717. //#define FdSenderTemplate u2.stemp
  718. //#define FdFilterSpec u2.fspec
  719. (*
  720. * ADSPEC class object
  721. *
  722. * Opaque to RSVP -- Contents defined in rapi_lib.h
  723. *)
  724. const
  725. ctype_ADSPEC_INTSERV = 2;
  726. {$EXTERNALSYM ctype_ADSPEC_INTSERV}
  727. (*
  728. * Guaranteed service Adspec parameters -- fixed part
  729. *)
  730. type
  731. Gads_parms_t = record
  732. Gads_serv_hdr: IntServServiceHdr; // GUARANTEED, x, len
  733. Gads_Ctot_hdr: IntServParmHdr; // GUAR_ADSPARM_Ctot
  734. Gads_Ctot: ULONG;
  735. Gads_Dtot_hdr: IntServParmHdr; // (GUAR_ADSPARM_Dtot
  736. Gads_Dtot: ULONG;
  737. Gads_Csum_hdr: IntServParmHdr; // GUAR_ADSPARM_Csum
  738. Gads_Csum: ULONG;
  739. Gads_Dsum_hdr: IntServParmHdr; // GUAR_ADSPARM_Dsum
  740. Gads_Dsum: ULONG;
  741. (*
  742. * May be followed by override general param values
  743. *)
  744. end;
  745. {$EXTERNALSYM Gads_parms_t}
  746. TGadsParmsT = Gads_parms_t;
  747. PGadsParmsT = ^Gads_parms_t;
  748. (*
  749. * General Path Characterization Parameters
  750. *)
  751. GenAdspecParams = record
  752. gen_parm_hdr: IntServServiceHdr; // GENERAL_INFO, len
  753. gen_parm_hopcnt_hdr: IntServParmHdr; // (IS_WKP_HOP_CNT
  754. gen_parm_hopcnt: ULONG;
  755. gen_parm_pathbw_hdr: IntServParmHdr; // IS_WKP_PATH_BW
  756. gen_parm_path_bw: FLOAT;
  757. gen_parm_minlat_hdr: IntServParmHdr; // IS_WKP_MIN_LATENCY
  758. gen_parm_min_latency: ULONG;
  759. gen_parm_compmtu_hdr: IntServParmHdr; // IS_WKP_COMPOSED_MTU
  760. gen_parm_composed_MTU: ULONG;
  761. end;
  762. {$EXTERNALSYM GenAdspecParams}
  763. TGenAdspecParams = GenAdspecParams;
  764. PGenAdspecParams = ^GenAdspecParams;
  765. (*
  766. * Contents of (minimal) int-serv Adspec
  767. *)
  768. IS_ADSPEC_BODY = record
  769. adspec_mh: IntServMainHdr; // Main header
  770. adspec_genparms: GenAdspecParams;// General char parm fragment
  771. (*
  772. * Followed by variable-length fragments for some or all
  773. * services. These can be minimal length fragments.
  774. *)
  775. end;
  776. {$EXTERNALSYM IS_ADSPEC_BODY}
  777. TIsAdSpecBody = IS_ADSPEC_BODY;
  778. PIsAdSpecBody = ^IS_ADSPEC_BODY;
  779. //const TODO Unknown Object_Header
  780. // GEN_ADSPEC_LEN = SizeOf(Object_header) + SizeOf(IS_adsbody_t);
  781. // {$EXTERNALSYM GEN_ADSPEC_LEN}
  782. type
  783. ADSPEC = record
  784. adspec_header: RsvpObjHdr;
  785. adspec_body: IS_ADSPEC_BODY; (* Defined in rapi_lib.h *)
  786. end;
  787. {$EXTERNALSYM ADSPEC}
  788. TAdSpec = ADSPEC;
  789. PAdSpec = ^ADSPEC;
  790. // RSVP message types
  791. const
  792. RSVP_PATH = 1;
  793. {$EXTERNALSYM RSVP_PATH}
  794. RSVP_RESV = 2;
  795. {$EXTERNALSYM RSVP_RESV}
  796. RSVP_PATH_ERR = 3;
  797. {$EXTERNALSYM RSVP_PATH_ERR}
  798. RSVP_RESV_ERR = 4;
  799. {$EXTERNALSYM RSVP_RESV_ERR}
  800. RSVP_PATH_TEAR = 5;
  801. {$EXTERNALSYM RSVP_PATH_TEAR}
  802. RSVP_RESV_TEAR = 6;
  803. {$EXTERNALSYM RSVP_RESV_TEAR}
  804. (* RSVP error codes
  805. *)
  806. RSVP_Err_NONE = 0; (* No error (CONFIRM) *)
  807. {$EXTERNALSYM RSVP_Err_NONE}
  808. RSVP_Erv_Nonev = 0; (* No-error Error Value *)
  809. {$EXTERNALSYM RSVP_Erv_Nonev}
  810. (* Admission Control failure *)
  811. RSVP_Err_ADMISSION = 1;
  812. {$EXTERNALSYM RSVP_Err_ADMISSION}
  813. (* Globally-defined sub-codes for : Admission Control failure *)
  814. RSVP_Erv_Other = 0; (* Unspecified cause *)
  815. {$EXTERNALSYM RSVP_Erv_Other}
  816. RSVP_Erv_DelayBnd = 1; (* Cannot meet delay bound req *)
  817. {$EXTERNALSYM RSVP_Erv_DelayBnd}
  818. RSVP_Erv_Bandwidth = 2; (* Insufficient bandwidth *)
  819. {$EXTERNALSYM RSVP_Erv_Bandwidth}
  820. RSVP_Erv_MTU = 3; (* MTU in flowspec too large *)
  821. {$EXTERNALSYM RSVP_Erv_MTU}
  822. // Microsoft specific error values
  823. RSVP_Erv_Flow_Rate = $8001;
  824. {$EXTERNALSYM RSVP_Erv_Flow_Rate}
  825. RSVP_Erv_Bucket_szie = $8002;
  826. {$EXTERNALSYM RSVP_Erv_Bucket_szie}
  827. RSVP_Erv_Peak_Rate = $8003;
  828. {$EXTERNALSYM RSVP_Erv_Peak_Rate}
  829. RSVP_Erv_Min_Policied_size = $8004;
  830. {$EXTERNALSYM RSVP_Erv_Min_Policied_size}
  831. (* Policy control failure *)
  832. RSVP_Err_POLICY = 2;
  833. {$EXTERNALSYM RSVP_Err_POLICY}
  834. // Policy error values from Identity draft
  835. POLICY_ERRV_NO_MORE_INFO = 1;
  836. {$EXTERNALSYM POLICY_ERRV_NO_MORE_INFO}
  837. POLICY_ERRV_UNSUPPORTED_CREDENTIAL_TYPE = 2;
  838. {$EXTERNALSYM POLICY_ERRV_UNSUPPORTED_CREDENTIAL_TYPE}
  839. POLICY_ERRV_INSUFFICIENT_PRIVILEGES = 3;
  840. {$EXTERNALSYM POLICY_ERRV_INSUFFICIENT_PRIVILEGES}
  841. POLICY_ERRV_EXPIRED_CREDENTIALS = 4;
  842. {$EXTERNALSYM POLICY_ERRV_EXPIRED_CREDENTIALS}
  843. POLICY_ERRV_IDENTITY_CHANGED = 5;
  844. {$EXTERNALSYM POLICY_ERRV_IDENTITY_CHANGED}
  845. // Microsoft specific policy error values
  846. POLICY_ERRV_UNKNOWN = 0;
  847. {$EXTERNALSYM POLICY_ERRV_UNKNOWN}
  848. POLICY_ERRV_GLOBAL_DEF_FLOW_COUNT = 1;
  849. {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_COUNT}
  850. POLICY_ERRV_GLOBAL_GRP_FLOW_COUNT = 2;
  851. {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_COUNT}
  852. POLICY_ERRV_GLOBAL_USER_FLOW_COUNT = 3;
  853. {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_COUNT}
  854. POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_COUNT = 4;
  855. {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_COUNT}
  856. POLICY_ERRV_SUBNET_DEF_FLOW_COUNT = 5;
  857. {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_COUNT}
  858. POLICY_ERRV_SUBNET_GRP_FLOW_COUNT = 6;
  859. {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_COUNT}
  860. POLICY_ERRV_SUBNET_USER_FLOW_COUNT = 7;
  861. {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_COUNT}
  862. POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_COUNT = 8;
  863. {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_COUNT}
  864. POLICY_ERRV_GLOBAL_DEF_FLOW_DURATION = 9;
  865. {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_DURATION}
  866. POLICY_ERRV_GLOBAL_GRP_FLOW_DURATION = 10;
  867. {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_DURATION}
  868. POLICY_ERRV_GLOBAL_USER_FLOW_DURATION = 11;
  869. {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_DURATION}
  870. POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_DURATION = 12;
  871. {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_DURATION}
  872. POLICY_ERRV_SUBNET_DEF_FLOW_DURATION = 13;
  873. {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_DURATION}
  874. POLICY_ERRV_SUBNET_GRP_FLOW_DURATION = 14;
  875. {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_DURATION}
  876. POLICY_ERRV_SUBNET_USER_FLOW_DURATION = 15;
  877. {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_DURATION}
  878. POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_DURATION = 16;
  879. {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_DURATION}
  880. POLICY_ERRV_GLOBAL_DEF_FLOW_RATE = 17;
  881. {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_FLOW_RATE}
  882. POLICY_ERRV_GLOBAL_GRP_FLOW_RATE = 18;
  883. {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_FLOW_RATE}
  884. POLICY_ERRV_GLOBAL_USER_FLOW_RATE = 19;
  885. {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_FLOW_RATE}
  886. POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_RATE = 20;
  887. {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_FLOW_RATE}
  888. POLICY_ERRV_SUBNET_DEF_FLOW_RATE = 21;
  889. {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_FLOW_RATE}
  890. POLICY_ERRV_SUBNET_GRP_FLOW_RATE = 22;
  891. {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_FLOW_RATE}
  892. POLICY_ERRV_SUBNET_USER_FLOW_RATE = 23;
  893. {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_FLOW_RATE}
  894. POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_RATE = 24;
  895. {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_FLOW_RATE}
  896. POLICY_ERRV_GLOBAL_DEF_PEAK_RATE = 25;
  897. {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_PEAK_RATE}
  898. POLICY_ERRV_GLOBAL_GRP_PEAK_RATE = 26;
  899. {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_PEAK_RATE}
  900. POLICY_ERRV_GLOBAL_USER_PEAK_RATE = 27;
  901. {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_PEAK_RATE}
  902. POLICY_ERRV_GLOBAL_UNAUTH_USER_PEAK_RATE = 28;
  903. {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_PEAK_RATE}
  904. POLICY_ERRV_SUBNET_DEF_PEAK_RATE = 29;
  905. {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_PEAK_RATE}
  906. POLICY_ERRV_SUBNET_GRP_PEAK_RATE = 30;
  907. {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_PEAK_RATE}
  908. POLICY_ERRV_SUBNET_USER_PEAK_RATE = 31;
  909. {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_PEAK_RATE}
  910. POLICY_ERRV_SUBNET_UNAUTH_USER_PEAK_RATE = 32;
  911. {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_PEAK_RATE}
  912. POLICY_ERRV_GLOBAL_DEF_SUM_FLOW_RATE = 33;
  913. {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_SUM_FLOW_RATE}
  914. POLICY_ERRV_GLOBAL_GRP_SUM_FLOW_RATE = 34;
  915. {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_SUM_FLOW_RATE}
  916. POLICY_ERRV_GLOBAL_USER_SUM_FLOW_RATE = 35;
  917. {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_SUM_FLOW_RATE}
  918. POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_FLOW_RATE = 36;
  919. {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_FLOW_RATE}
  920. POLICY_ERRV_SUBNET_DEF_SUM_FLOW_RATE = 37;
  921. {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_SUM_FLOW_RATE}
  922. POLICY_ERRV_SUBNET_GRP_SUM_FLOW_RATE = 38;
  923. {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_SUM_FLOW_RATE}
  924. POLICY_ERRV_SUBNET_USER_SUM_FLOW_RATE = 39;
  925. {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_SUM_FLOW_RATE}
  926. POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_FLOW_RATE = 40;
  927. {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_FLOW_RATE}
  928. POLICY_ERRV_GLOBAL_DEF_SUM_PEAK_RATE = 41;
  929. {$EXTERNALSYM POLICY_ERRV_GLOBAL_DEF_SUM_PEAK_RATE}
  930. POLICY_ERRV_GLOBAL_GRP_SUM_PEAK_RATE = 42;
  931. {$EXTERNALSYM POLICY_ERRV_GLOBAL_GRP_SUM_PEAK_RATE}
  932. POLICY_ERRV_GLOBAL_USER_SUM_PEAK_RATE = 43;
  933. {$EXTERNALSYM POLICY_ERRV_GLOBAL_USER_SUM_PEAK_RATE}
  934. POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_PEAK_RATE = 44;
  935. {$EXTERNALSYM POLICY_ERRV_GLOBAL_UNAUTH_USER_SUM_PEAK_RATE}
  936. POLICY_ERRV_SUBNET_DEF_SUM_PEAK_RATE = 45;
  937. {$EXTERNALSYM POLICY_ERRV_SUBNET_DEF_SUM_PEAK_RATE}
  938. POLICY_ERRV_SUBNET_GRP_SUM_PEAK_RATE = 46;
  939. {$EXTERNALSYM POLICY_ERRV_SUBNET_GRP_SUM_PEAK_RATE}
  940. POLICY_ERRV_SUBNET_USER_SUM_PEAK_RATE = 47;
  941. {$EXTERNALSYM POLICY_ERRV_SUBNET_USER_SUM_PEAK_RATE}
  942. POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_PEAK_RATE = 48;
  943. {$EXTERNALSYM POLICY_ERRV_SUBNET_UNAUTH_USER_SUM_PEAK_RATE}
  944. POLICY_ERRV_UNKNOWN_USER = 49;
  945. {$EXTERNALSYM POLICY_ERRV_UNKNOWN_USER}
  946. POLICY_ERRV_NO_PRIVILEGES = 50;
  947. {$EXTERNALSYM POLICY_ERRV_NO_PRIVILEGES}
  948. POLICY_ERRV_EXPIRED_USER_TOKEN = 51;
  949. {$EXTERNALSYM POLICY_ERRV_EXPIRED_USER_TOKEN}
  950. POLICY_ERRV_NO_RESOURCES = 52;
  951. {$EXTERNALSYM POLICY_ERRV_NO_RESOURCES}
  952. POLICY_ERRV_PRE_EMPTED = 53;
  953. {$EXTERNALSYM POLICY_ERRV_PRE_EMPTED}
  954. POLICY_ERRV_USER_CHANGED = 54;
  955. {$EXTERNALSYM POLICY_ERRV_USER_CHANGED}
  956. POLICY_ERRV_NO_ACCEPTS = 55;
  957. {$EXTERNALSYM POLICY_ERRV_NO_ACCEPTS}
  958. POLICY_ERRV_NO_MEMORY = 56;
  959. {$EXTERNALSYM POLICY_ERRV_NO_MEMORY}
  960. POLICY_ERRV_CRAZY_FLOWSPEC = 57;
  961. {$EXTERNALSYM POLICY_ERRV_CRAZY_FLOWSPEC}
  962. // Other RSVP defined Error codes
  963. RSVP_Err_NO_PATH = 3; (* No path state for Resv *)
  964. {$EXTERNALSYM RSVP_Err_NO_PATH}
  965. RSVP_Err_NO_SENDER = 4; (* No sender info for Resv *)
  966. {$EXTERNALSYM RSVP_Err_NO_SENDER}
  967. RSVP_Err_BAD_STYLE = 5; (* Conflicting style *)
  968. {$EXTERNALSYM RSVP_Err_BAD_STYLE}
  969. RSVP_Err_UNKNOWN_STYLE = 6; (* Unknown reservation style *)
  970. {$EXTERNALSYM RSVP_Err_UNKNOWN_STYLE}
  971. RSVP_Err_BAD_DSTPORT = 7; (* Conflicting DstPort in Sess *)
  972. {$EXTERNALSYM RSVP_Err_BAD_DSTPORT}
  973. RSVP_Err_BAD_SNDPORT = 8; (* Conflicting Sender port *)
  974. {$EXTERNALSYM RSVP_Err_BAD_SNDPORT}
  975. RSVP_Err_AMBIG_FILTER = 9; (* Ambiguous Filter spec in Resv*)
  976. {$EXTERNALSYM RSVP_Err_AMBIG_FILTER}
  977. RSVP_Err_PREEMPTED = 12; (* Service Preempted *)
  978. {$EXTERNALSYM RSVP_Err_PREEMPTED}
  979. (* Unknown object Class-Num *)
  980. RSVP_Err_UNKN_OBJ_CLASS = 13;
  981. {$EXTERNALSYM RSVP_Err_UNKN_OBJ_CLASS}
  982. (* ErrVal = Class_num, CType *)
  983. (* Unknown object C-Type *)
  984. RSVP_Err_UNKNOWN_CTYPE = 14;
  985. {$EXTERNALSYM RSVP_Err_UNKNOWN_CTYPE}
  986. (* ErrVal = Class_num, CType *)
  987. RSVP_Err_API_ERROR = 20; (* API client error *)
  988. {$EXTERNALSYM RSVP_Err_API_ERROR}
  989. (* ErrVal = API error code *)
  990. (* Traffic Control error *)
  991. RSVP_Err_TC_ERROR = 21;
  992. {$EXTERNALSYM RSVP_Err_TC_ERROR}
  993. (* Globally-defined sub-codes for : Traffic Control errors *)
  994. RSVP_Erv_Conflict_Serv = 01; (* Service Conflict *)
  995. {$EXTERNALSYM RSVP_Erv_Conflict_Serv}
  996. RSVP_Erv_No_Serv = 02; (* Unknown Service *)
  997. {$EXTERNALSYM RSVP_Erv_No_Serv}
  998. RSVP_Erv_Crazy_Flowspec = 03; (* Unreasonable Flowspec *)
  999. {$EXTERNALSYM RSVP_Erv_Crazy_Flowspec}
  1000. RSVP_Erv_Crazy_Tspec = 04; (* Unreasonable Tspec *)
  1001. {$EXTERNALSYM RSVP_Erv_Crazy_Tspec}
  1002. RSVP_Err_TC_SYS_ERROR = 22; (* Traffic control system error *)
  1003. {$EXTERNALSYM RSVP_Err_TC_SYS_ERROR}
  1004. (* ErrVal = kernel error code *)
  1005. (* RSVP System error *)
  1006. RSVP_Err_RSVP_SYS_ERROR = 23;
  1007. {$EXTERNALSYM RSVP_Err_RSVP_SYS_ERROR}
  1008. (* Globally-defined sub-codes for : RSVP system errors *)
  1009. RSVP_Erv_MEMORY = 1; (* Out of memory *)
  1010. {$EXTERNALSYM RSVP_Erv_MEMORY}
  1011. RSVP_Erv_API = 2; (* API logic error *)
  1012. {$EXTERNALSYM RSVP_Erv_API}
  1013. // Identity Policy elements related defines
  1014. // Reseved Identity PE types
  1015. LPM_PE_USER_IDENTITY = 2;
  1016. {$EXTERNALSYM LPM_PE_USER_IDENTITY}
  1017. LPM_PE_APP_IDENTITY = 3;
  1018. {$EXTERNALSYM LPM_PE_APP_IDENTITY}
  1019. // Defines for Identity error values
  1020. ERROR_NO_MORE_INFO = 1;
  1021. {$EXTERNALSYM ERROR_NO_MORE_INFO}
  1022. UNSUPPORTED_CREDENTIAL_TYPE = 2;
  1023. {$EXTERNALSYM UNSUPPORTED_CREDENTIAL_TYPE}
  1024. INSUFFICIENT_PRIVILEGES = 3;
  1025. {$EXTERNALSYM INSUFFICIENT_PRIVILEGES}
  1026. EXPIRED_CREDENTIAL = 4;
  1027. {$EXTERNALSYM EXPIRED_CREDENTIAL}
  1028. IDENTITY_CHANGED = 5;
  1029. {$EXTERNALSYM IDENTITY_CHANGED}
  1030. type
  1031. ID_ERROR_OBJECT = record
  1032. usIdErrLength: USHORT;
  1033. ucAType: UCHAR;
  1034. ucSubType: UCHAR;
  1035. usReserved: USHORT;
  1036. usIdErrorValue: USHORT;
  1037. ucIdErrData: array [0..3] of UCHAR;
  1038. end;
  1039. {$EXTERNALSYM ID_ERROR_OBJECT}
  1040. TIdErrorObject = ID_ERROR_OBJECT;
  1041. PIdErrorObject = ^ID_ERROR_OBJECT;
  1042. const
  1043. ID_ERR_OBJ_HDR_LEN = SizeOf(ID_ERROR_OBJECT) - 4 * SizeOf(UCHAR);
  1044. {$EXTERNALSYM ID_ERR_OBJ_HDR_LEN}
  1045. (*
  1046. LPM API specific definitions
  1047. *)
  1048. (**************************************
  1049. LPM_Initialize
  1050. ***************************************)
  1051. type
  1052. LPM_HANDLE = HANDLE;
  1053. {$EXTERNALSYM LPM_HANDLE}
  1054. RHANDLE = HANDLE;
  1055. {$EXTERNALSYM RHANDLE}
  1056. LPV = ULONG;
  1057. {$EXTERNALSYM LPV}
  1058. PETYPE = USHORT;
  1059. {$EXTERNALSYM PETYPE}
  1060. const
  1061. LPM_OK = 0;
  1062. {$EXTERNALSYM LPM_OK}
  1063. type
  1064. MSG_TYPE = Integer;
  1065. {$EXTERNALSYM MSG_TYPE}
  1066. TMsgType = MSG_TYPE;
  1067. rsvpmsgobjs = record
  1068. RsvpMsgType: TMsgType;
  1069. pRsvpSession: PRsvpSession;
  1070. pRsvpFromHop: PRsvpHop;
  1071. pRsvpToHop: PRsvpHop;
  1072. pResvStyle: PResvStyle;
  1073. pRsvpScope: PRsvpScope;
  1074. FlowDescCount: Integer;
  1075. pFlowDescs: PFlowDesc;
  1076. PdObjectCount: Integer;
  1077. ppPdObjects: ^PPolicyData;
  1078. pErrorSpec: PErrorSpec;
  1079. pAdspec: PADSpec;
  1080. end;
  1081. {$EXTERNALSYM rsvpmsgobjs}
  1082. RSVP_MSG_OBJS = rsvpmsgobjs;
  1083. {$EXTERNALSYM RSVP_MSG_OBJS}
  1084. TRsvpMsgObjs = RSVP_MSG_OBJS;
  1085. PRsvpMsgObjs = ^RSVP_MSG_OBJS;
  1086. PALLOCMEM = function(Size: DWORD): Pointer; stdcall;
  1087. {$EXTERNALSYM PALLOCMEM}
  1088. TAllocMem = PALLOCMEM;
  1089. PFREEMEM = procedure(pv: Pointer); stdcall;
  1090. {$EXTERNALSYM PFREEMEM}
  1091. TFreeMem = PFREEMEM;
  1092. policy_decision = record
  1093. lpvResult: LPV; // Use the LPV values from above
  1094. wPolicyErrCode: WORD; // RSVP defined error codes
  1095. wPolicyErrValue: WORD; // RSVP defined error values
  1096. end;
  1097. {$EXTERNALSYM policy_decision}
  1098. TPolicyDecision = policy_decision;
  1099. PPolicyDecision = ^policy_decision;
  1100. CBADMITRESULT = function(LpmHandle: LPM_HANDLE; RequestHandle: RHANDLE;
  1101. ulPcmActionFlags: ULONG; LpmError: Integer; PolicyDecisionsCount: Integer;
  1102. pPolicyDecisions: PPolicyDecision): ULONG; stdcall;
  1103. {$EXTERNALSYM CBADMITRESULT}
  1104. TCbAdmitResult = CBADMITRESULT;
  1105. CBGETRSVPOBJECTS = function(LpmHandle: LPM_HANDLE; RequestHandle: RHANDLE;
  1106. LpmError: Integer; RsvpObjectsCount: Integer; ppRsvpObjects: PPRsvpObjHdr): ULONG; stdcall;
  1107. {$EXTERNALSYM CBGETRSVPOBJECTS}
  1108. TCbGetRsvpObjects = CBGETRSVPOBJECTS;
  1109. // The above 2 call backs can return the following errors
  1110. const
  1111. INV_LPM_HANDLE = 1; // Supplied LpmHandle is invalid
  1112. {$EXTERNALSYM INV_LPM_HANDLE}
  1113. LPM_TIME_OUT = 2; // LPM has returned results after the time limit
  1114. {$EXTERNALSYM LPM_TIME_OUT}
  1115. INV_REQ_HANDLE = 3; // Supplied Request handle is invalid
  1116. {$EXTERNALSYM INV_REQ_HANDLE}
  1117. DUP_RESULTS = 4; // LPM has already returned results for this request
  1118. {$EXTERNALSYM DUP_RESULTS}
  1119. INV_RESULTS = 5; // Results supplied are invalid
  1120. {$EXTERNALSYM INV_RESULTS}
  1121. type
  1122. lpminitinfo = record
  1123. PcmVersionNumber: DWORD;
  1124. ResultTimeLimit: DWORD;
  1125. ConfiguredLpmCount: Integer;
  1126. AllocMemory: PALLOCMEM;
  1127. FreeMemory: PFREEMEM;
  1128. PcmAdmitResultCallback: CBADMITRESULT;
  1129. GetRsvpObjectsCallback: CBGETRSVPOBJECTS;
  1130. end;
  1131. {$EXTERNALSYM lpminitinfo}
  1132. LPM_INIT_INFO = lpminitinfo;
  1133. {$EXTERNALSYM LPM_INIT_INFO}
  1134. TLpmInitInfo = LPM_INIT_INFO;
  1135. PLpmInitInfo = ^LPM_INIT_INFO;
  1136. // Valid PE types
  1137. // XXX ISSUE - Is 0xFFFF a better choice?
  1138. const
  1139. LPM_PE_ALL_TYPES = 0;
  1140. {$EXTERNALSYM LPM_PE_ALL_TYPES}
  1141. // Current LPM API version number
  1142. LPM_API_VERSION_1 = 1;
  1143. {$EXTERNALSYM LPM_API_VERSION_1}
  1144. // Current PCM version number
  1145. PCM_VERSION_1 = 1;
  1146. {$EXTERNALSYM PCM_VERSION_1}
  1147. function LPM_Initialize(LpmHandle: LPM_HANDLE; const pLpmInitInfo: LPM_INIT_INFO;
  1148. var pLpmVersionNumber: DWORD; var pSupportedPeType: PETYPE; Reserved: Pointer): ULONG; stdcall;
  1149. {$EXTERNALSYM LPM_Initialize}
  1150. (**************************************
  1151. LPM_Deinitialize
  1152. ***************************************)
  1153. function LPM_Deinitialize(LpmHandle: LPM_HANDLE): ULONG; stdcall;
  1154. {$EXTERNALSYM LPM_Deinitialize}
  1155. (**************************************
  1156. LPM_AdmitRsvpMsg
  1157. ***************************************)
  1158. // Valid LPV - LPM Priority Values
  1159. const
  1160. LPV_RESERVED = 0;
  1161. {$EXTERNALSYM LPV_RESERVED}
  1162. LPV_MIN_PRIORITY = 1;
  1163. {$EXTERNALSYM LPV_MIN_PRIORITY}
  1164. LPV_MAX_PRIORITY = $FF00;
  1165. {$EXTERNALSYM LPV_MAX_PRIORITY}
  1166. LPV_DROP_MSG = $FFFD;
  1167. {$EXTERNALSYM LPV_DROP_MSG}
  1168. LPV_DONT_CARE = $FFFE;
  1169. {$EXTERNALSYM LPV_DONT_CARE}
  1170. LPV_REJECT = $FFFF;
  1171. {$EXTERNALSYM LPV_REJECT}
  1172. // Valid values for PcmActionFlags
  1173. FORCE_IMMEDIATE_REFRESH = 1;
  1174. {$EXTERNALSYM FORCE_IMMEDIATE_REFRESH}
  1175. // Function return values for LPM_AdmitResvMsg
  1176. LPM_RESULT_READY = 0;
  1177. {$EXTERNALSYM LPM_RESULT_READY}
  1178. LPM_RESULT_DEFER = 1;
  1179. {$EXTERNALSYM LPM_RESULT_DEFER}
  1180. function LPM_AdmitRsvpMsg(PcmReqHandle: RHANDLE; const pRecvdIntf: RSVP_HOP;
  1181. const pRsvpMsgObjs: RSVP_MSG_OBJS; RcvdRsvpMsgLength: Integer; RcvdRsvpMsg: PUCHAR;
  1182. var pulPcmActionFlags: ULONG; pPolicyDecisions: PPolicyDecision; Reserved: Pointer): ULONG; stdcall;
  1183. {$EXTERNALSYM LPM_AdmitRsvpMsg}
  1184. (**************************************
  1185. LPM_GetRsvpObjects
  1186. ***************************************)
  1187. // Function return values are defined in LPM_AdmitResvMsg section
  1188. function LPM_GetRsvpObjects(PcmReqHandle: RHANDLE; MaxPdSize: ULONG;
  1189. SendingIntfAddr: PRsvpHop; pRsvpMsgObjs: PRsvpMsgObjs; var pRsvpObjectsCount: Integer;
  1190. var pppRsvpObjects: PRsvpObjHdr; Reserved: Pointer): ULONG; stdcall;
  1191. {$EXTERNALSYM LPM_GetRsvpObjects}
  1192. (**************************************
  1193. LPM_DeleteState
  1194. ***************************************)
  1195. // TearDown reasons
  1196. const
  1197. RCVD_PATH_TEAR = 1;
  1198. {$EXTERNALSYM RCVD_PATH_TEAR}
  1199. RCVD_RESV_TEAR = 2;
  1200. {$EXTERNALSYM RCVD_RESV_TEAR}
  1201. ADM_CTRL_FAILED = 3;
  1202. {$EXTERNALSYM ADM_CTRL_FAILED}
  1203. STATE_TIMEOUT = 4;
  1204. {$EXTERNALSYM STATE_TIMEOUT}
  1205. FLOW_DURATION = 5;
  1206. {$EXTERNALSYM FLOW_DURATION}
  1207. procedure LPM_DeleteState(pRcvdIfAddr: PRsvpHop; RsvpMsgType: TMsgType;
  1208. pRsvpSession: PRsvpSession; pRsvpFromHop: PRsvpHop; pResvStyle: PResvStyle;
  1209. FilterSpecCount: Integer; ppFilterSpecList: PFilterSpec; TearDownReason: Integer); stdcall;
  1210. {$EXTERNALSYM LPM_DeleteState}
  1211. (**************************************
  1212. LPM_IpAddrTable
  1213. ***************************************)
  1214. type
  1215. lpmiptable = record
  1216. ulIfIndex: ULONG; // SNMP index for this interface
  1217. MediaType: ULONG; // As defined in IPIFCONS.H
  1218. IfIpAddr: IN_ADDR; // Interface IP address
  1219. IfNetMask: IN_ADDR; // Interface subnet mask
  1220. end;
  1221. {$EXTERNALSYM lpmiptable}
  1222. TLpmIpTable = lpmiptable;
  1223. PLpmIpTable = ^lpmiptable;
  1224. function LPM_IpAddressTable(cIpAddrTable: ULONG; pIpAddrTable: PLpmIpTable): BOOL; stdcall;
  1225. {$EXTERNALSYM LPM_IpAddressTable}
  1226. (**************************************
  1227. LPM_CommitResv
  1228. ***************************************)
  1229. // CommitDecision values
  1230. const
  1231. RESOURCES_ALLOCATED = 1;
  1232. {$EXTERNALSYM RESOURCES_ALLOCATED}
  1233. RESOURCES_MODIFIED = 2;
  1234. {$EXTERNALSYM RESOURCES_MODIFIED}
  1235. procedure LPM_CommitResv(RsvpSession: PRsvpSession; FlowInstalledIntf: PRsvpHop;
  1236. RsvpStyle: PResvStyle; FilterSpecCount: Integer; ppFilterSpecList: PFilterSpec;
  1237. pMergedFlowSpec: PIsFlowSpec; CommitDecision: ULONG); stdcall;
  1238. {$EXTERNALSYM LPM_CommitResv}
  1239. {$ENDIF JWA_IMPLEMENTATIONSECTION}
  1240. {$IFNDEF JWA_OMIT_SECTIONS}
  1241. implementation
  1242. //uses ...
  1243. {$ENDIF JWA_OMIT_SECTIONS}
  1244. {$IFNDEF JWA_INTERFACESECTION}
  1245. {$IFNDEF JWA_INCLUDEMODE}
  1246. const
  1247. lpmlib = 'msidlpm.dll';
  1248. {$ENDIF JWA_INCLUDEMODE}
  1249. function ObjLength(const x: TRsvpObjHdr): USHORT;
  1250. begin
  1251. Result := x.obj_length;
  1252. end;
  1253. function ObjCType(const x: TRsvpObjHdr): UCHAR;
  1254. begin
  1255. Result := x.obj_ctype;
  1256. end;
  1257. function ObjClass(const x: TRsvpObjHdr): UCHAR;
  1258. begin
  1259. Result := x.obj_class;
  1260. end;
  1261. function ObjData(const x: TRsvpObjHdr): Pointer;
  1262. begin
  1263. Result := Pointer(Integer(@x) + SizeOf(x));
  1264. end;
  1265. function Style_is_Wildcard(p: DWORD): Boolean;
  1266. begin
  1267. Result := (p and Opt_SndSel_mask) = Opt_Wildcard;
  1268. end;
  1269. function Style_is_Shared(p: DWORD): Boolean;
  1270. begin
  1271. Result := (p and Opt_Share_mask) = Opt_Shared;
  1272. end;
  1273. function Error_Usage(x: DWORD): DWORD;
  1274. begin
  1275. Result := (x shr 12) and 3;
  1276. end;
  1277. function Intserv_Version(x: DWORD): DWORD;
  1278. begin
  1279. Result := (x and INTSERV_VERS_MASK) shr 4;
  1280. end;
  1281. function Intserv_Version_OK(const x: TIntServMainHdr): Boolean;
  1282. begin
  1283. Result := (x.ismh_version and INTSERV_VERS_MASK) = INTSERV_VERSION0;
  1284. end;
  1285. function Intserv_Obj_size(const x: TIntServMainHdr): DWORD;
  1286. begin
  1287. Result := x.ismh_len32b * 4 + SizeOf(IntServMainHdr) + SizeOf(RsvpObjHdr);
  1288. end;
  1289. function Issh_len32b(const p: TIntServServiceHdr): USHORT;
  1290. begin
  1291. Result := p.issh_len32b;
  1292. end;
  1293. {$IFDEF DYNAMIC_LINK}
  1294. var
  1295. _LPM_Initialize: Pointer;
  1296. function LPM_Initialize;
  1297. begin
  1298. GetProcedureAddress(_LPM_Initialize, lpmlib, 'LPM_Initialize');
  1299. asm
  1300. MOV ESP, EBP
  1301. POP EBP
  1302. JMP [_LPM_Initialize]
  1303. end;
  1304. end;
  1305. var
  1306. _LPM_Deinitialize: Pointer;
  1307. function LPM_Deinitialize;
  1308. begin
  1309. GetProcedureAddress(_LPM_Deinitialize, lpmlib, 'LPM_Deinitialize');
  1310. asm
  1311. MOV ESP, EBP
  1312. POP EBP
  1313. JMP [_LPM_Deinitialize]
  1314. end;
  1315. end;
  1316. var
  1317. _LPM_AdmitRsvpMsg: Pointer;
  1318. function LPM_AdmitRsvpMsg;
  1319. begin
  1320. GetProcedureAddress(_LPM_AdmitRsvpMsg, lpmlib, 'LPM_AdmitRsvpMsg');
  1321. asm
  1322. MOV ESP, EBP
  1323. POP EBP
  1324. JMP [_LPM_AdmitRsvpMsg]
  1325. end;
  1326. end;
  1327. var
  1328. _LPM_GetRsvpObjects: Pointer;
  1329. function LPM_GetRsvpObjects;
  1330. begin
  1331. GetProcedureAddress(_LPM_GetRsvpObjects, lpmlib, 'LPM_GetRsvpObjects');
  1332. asm
  1333. MOV ESP, EBP
  1334. POP EBP
  1335. JMP [_LPM_GetRsvpObjects]
  1336. end;
  1337. end;
  1338. var
  1339. _LPM_DeleteState: Pointer;
  1340. procedure LPM_DeleteState;
  1341. begin
  1342. GetProcedureAddress(_LPM_DeleteState, lpmlib, 'LPM_DeleteState');
  1343. asm
  1344. MOV ESP, EBP
  1345. POP EBP
  1346. JMP [_LPM_DeleteState]
  1347. end;
  1348. end;
  1349. var
  1350. _LPM_IpAddressTable: Pointer;
  1351. function LPM_IpAddressTable;
  1352. begin
  1353. GetProcedureAddress(_LPM_IpAddressTable, lpmlib, 'LPM_IpAddressTable');
  1354. asm
  1355. MOV ESP, EBP
  1356. POP EBP
  1357. JMP [_LPM_IpAddressTable]
  1358. end;
  1359. end;
  1360. var
  1361. _LPM_CommitResv: Pointer;
  1362. procedure LPM_CommitResv;
  1363. begin
  1364. GetProcedureAddress(_LPM_CommitResv, lpmlib, 'LPM_CommitResv');
  1365. asm
  1366. MOV ESP, EBP
  1367. POP EBP
  1368. JMP [_LPM_CommitResv]
  1369. end;
  1370. end;
  1371. {$ELSE}
  1372. function LPM_Initialize; external lpmlib name 'LPM_Initialize';
  1373. function LPM_Deinitialize; external lpmlib name 'LPM_Deinitialize';
  1374. function LPM_AdmitRsvpMsg; external lpmlib name 'LPM_AdmitRsvpMsg';
  1375. function LPM_GetRsvpObjects; external lpmlib name 'LPM_GetRsvpObjects';
  1376. procedure LPM_DeleteState; external lpmlib name 'LPM_DeleteState';
  1377. function LPM_IpAddressTable; external lpmlib name 'LPM_IpAddressTable';
  1378. procedure LPM_CommitResv; external lpmlib name 'LPM_CommitResv';
  1379. {$ENDIF DYNAMIC_LINK}
  1380. {$ENDIF JWA_INTERFACESECTION}
  1381. {$IFNDEF JWA_OMIT_SECTIONS}
  1382. end.
  1383. {$ENDIF JWA_OMIT_SECTIONS}