📄 jwalpmapi.pas
字号:
//#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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -