📄 jwaqossp.pas
字号:
ObjectHdr: QOS_OBJECT_HDR; // Object Hdr
StatusCode: ULONG; // Error or Status Information see Winsock2.h
ExtendedStatus1: ULONG; // Provider specific status extension
ExtendedStatus2: ULONG; // Provider specific status extension
end;
{$EXTERNALSYM _RSVP_STATUS_INFO}
RSVP_STATUS_INFO = _RSVP_STATUS_INFO;
{$EXTERNALSYM RSVP_STATUS_INFO}
TRsvpStatusInfo = RSVP_STATUS_INFO;
PRsvpStatusInfo = LPRSVP_STATUS_INFO;
LPCRSVP_STATUS_INFO = ^RSVP_STATUS_INFO;
{$EXTERNALSYM LPCRSVP_STATUS_INFO}
(*
* QOS_DestAddr structure -- used for WSAIoctl(SIO_SET_QOS) when we
* do not want to issue a connect for a sending socket. The destination
* address is required so we can generate the session information for
* RSVP signalling.
*)
LPQOS_DESTADDR = ^QOS_DESTADDR;
{$EXTERNALSYM LPQOS_DESTADDR}
_QOS_DESTADDR = record
ObjectHdr: QOS_OBJECT_HDR; // Object header
SocketAddress: PSockAddr; // Destination socket address
SocketAddressLength: ULONG; // Length of the address structure
end;
{$EXTERNALSYM _QOS_DESTADDR}
QOS_DESTADDR = _QOS_DESTADDR;
{$EXTERNALSYM QOS_DESTADDR}
TQosDestAddr = QOS_DESTADDR;
PQosDestAddr = LPQOS_DESTADDR;
LPCQOS_DESTADDR = ^QOS_DESTADDR;
{$EXTERNALSYM LPCQOS_DESTADDR}
(*
* this structure defines the "General Characterization Parameters" contained in
* the RSVP Adspec object
*)
LPAD_GENERAL_PARAMS = ^AD_GENERAL_PARAMS;
{$EXTERNALSYM LPAD_GENERAL_PARAMS}
_AD_GENERAL_PARAMS = record
IntServAwareHopCount: ULONG; // number of hops that conform to
// Integrated Services requirements *)
PathBandwidthEstimate: ULONG; // minimum bandwidth available from
// sender to receiver *)
MinimumLatency: ULONG; // sum of minimum latency of the packet
// forwarding process in routers
// (in usec)*)
PathMTU: ULONG; // max transmission unit end to end that
// will not incur fragmentation *)
Flags: ULONG; // used to hold break bits.*)
end;
{$EXTERNALSYM _AD_GENERAL_PARAMS}
AD_GENERAL_PARAMS = _AD_GENERAL_PARAMS;
{$EXTERNALSYM AD_GENERAL_PARAMS}
TAdGeneralParams = AD_GENERAL_PARAMS;
PAdGeneralParams = LPAD_GENERAL_PARAMS;
(*
* Minimum Latency may be set to this "undefined" value
*)
const
INDETERMINATE_LATENCY = DWORD($FFFFFFFF);
{$EXTERNALSYM INDETERMINATE_LATENCY}
(*
* This Flag is used to indicate the existence of a network element not
* supporting QoS control services somewhere in the data path. If this bit
* is set in the specific service override then it indicates that that
* service was not supported at at least one hop.
*)
AD_FLAG_BREAK_BIT = $00000001;
{$EXTERNALSYM AD_FLAG_BREAK_BIT}
(*
* this structure describes the Guaranteed service parameters
*)
type
LPAD_GUARANTEED = ^AD_GUARANTEED;
{$EXTERNALSYM LPAD_GUARANTEED}
_AD_GUARANTEED = record
CTotal: ULONG;
DTotal: ULONG;
CSum: ULONG;
DSum: ULONG;
end;
{$EXTERNALSYM _AD_GUARANTEED}
AD_GUARANTEED = _AD_GUARANTEED;
{$EXTERNALSYM AD_GUARANTEED}
TAdGuaranteed = AD_GUARANTEED;
PAdGuaranteed = LPAD_GUARANTEED;
(*
* this structure describes the format of the parameter buffer that can be
* included in the Service_Type structure below. This structure allows an
* application to include any valid Int Serv service parameter in the Buffer
* value, after providing the Int Serv parameter id in the ParameterId field.
*)
LPPARAM_BUFFER = ^PARAM_BUFFER;
{$EXTERNALSYM LPPARAM_BUFFER}
_PARAM_BUFFER = record
ParameterId: ULONG; // Int Server parameter ID
Length: ULONG; // total length of this structure
// ( 8 bytes + length of Buffer )
Buffer: array [0..1 - 1] of UCHAR; // Paramter itself
end;
{$EXTERNALSYM _PARAM_BUFFER}
PARAM_BUFFER = _PARAM_BUFFER;
{$EXTERNALSYM PARAM_BUFFER}
TParamBuffer = PARAM_BUFFER;
PParamBuffer = LPPARAM_BUFFER;
(*
* this structure contains the service types supported
*)
LPCONTROL_SERVICE = ^CONTROL_SERVICE;
{$EXTERNALSYM LPCONTROL_SERVICE}
_CONTROL_SERVICE = record
//
// the length of this entire structure including the following buffer.
// This length value can be added to the ptr to the structure to get the ptr
// to the next SERVICE_TYPE structure in the list, until the
// NumberOfServices count has been exhausted.
//
Length: ULONG;
Service: SERVICETYPE;
Overrides: AD_GENERAL_PARAMS;
//
// service specific information ( controlled load has no service specific
// info here )
//
case Integer of
0: (Guaranteed: AD_GUARANTEED);
1: (ParamBuffer: array [0..0] of PARAM_BUFFER); // allows for other services down the road
end;
{$EXTERNALSYM _CONTROL_SERVICE}
CONTROL_SERVICE = _CONTROL_SERVICE;
{$EXTERNALSYM CONTROL_SERVICE}
TControlService = CONTROL_SERVICE;
PControlService = LPCONTROL_SERVICE;
(*
* This structure defines the information which is carried in the Rsvp
* Adspec. This Rsvp object typically indicates which service types are
* available ( Controlled Load and/or Guaranteed Service ), if a non-Rsvp
* hop has been encountered by the Path message, and the minumum MTU along
* the path. The services array indicates which services are supported
*)
LPRSVP_ADSPEC = ^RSVP_ADSPEC;
{$EXTERNALSYM LPRSVP_ADSPEC}
_RSVP_ADSPEC = record
ObjectHdr: QOS_OBJECT_HDR;
GeneralParams: AD_GENERAL_PARAMS; // contains the general characterization paramters
NumberOfServices: ULONG; // count of the number of services
Services: array [0..0] of CONTROL_SERVICE; // a list of the services supported/requested
end;
{$EXTERNALSYM _RSVP_ADSPEC}
RSVP_ADSPEC = _RSVP_ADSPEC;
{$EXTERNALSYM RSVP_ADSPEC}
TRsvpAdSpec = RSVP_ADSPEC;
PRsvpAdSpec = LPRSVP_ADSPEC;
//
// Opcode for the SIO_CHK_QOS ioctl
// (specific for the Microsoft QOS Service Provider
//
// Bascially:
//
// SIO_CHK_QOS = _WSAIORW(IOC_VENDOR,1)
// = mIOC_IN | mIOC_OUT | mIOC_VENDOR | mCOMPANY | ioctl_code
// where
// mIOC_IN = 0x80000000
// mIOC_OUT = 0x40000000
// mIOC_VENDOR = 0x04000000
// mCOMPANY = 0x18000000
// ioctl_code = 0x00000001
//
// See WSAIoctl man page for details.
//
const
mIOC_IN = DWORD($80000000);
{$EXTERNALSYM mIOC_IN}
mIOC_OUT = $40000000;
{$EXTERNALSYM mIOC_OUT}
mIOC_VENDOR = $04000000;
{$EXTERNALSYM mIOC_VENDOR}
mCOMPANY = $18000000;
{$EXTERNALSYM mCOMPANY}
ioctl_code = $00000001;
{$EXTERNALSYM ioctl_code}
SIO_CHK_QOS = mIOC_IN or mIOC_OUT or mIOC_VENDOR or mCOMPANY or ioctl_code;
{$EXTERNALSYM SIO_CHK_QOS}
//
// The following may be specified in the input buffer
// of the SIO_CHK_IOCTL ioctl call
//
QOSSPBASE = 50000;
{$EXTERNALSYM QOSSPBASE}
ALLOWED_TO_SEND_DATA = (QOSSPBASE+1); // query the SBM/BEST_EFFORT limit
{$EXTERNALSYM ALLOWED_TO_SEND_DATA}
// -- result is based on a comparison between
// the user-specified token rate and the
// SBM/BEST_EFFORT bandwidth parameters in
// the system
// -- result is a YES(1) or NO(0) answer
// in the output buffer
ABLE_TO_RECV_RSVP = (QOSSPBASE+2); // query the SBM/BEST_EFFORT limit
{$EXTERNALSYM ABLE_TO_RECV_RSVP}
// -- result is based on a comparison between
// the user-specified token rate and the
// SBM/BEST_EFFORT bandwidth parameters in
// the system
// -- result is a YES(1) or NO(0) answer
// in the output buffer
LINE_RATE = (QOSSPBASE+3); // query the interface capacity
{$EXTERNALSYM LINE_RATE}
// -- result returned in the output buffer
// in kilo-bits per second
LOCAL_TRAFFIC_CONTROL = (QOSSPBASE+4); // check if Kernel Traffic Control is available or not
{$EXTERNALSYM LOCAL_TRAFFIC_CONTROL}
// -- 0 if not available
// -- 1 if avaiable
// -- INFO_NOT_AVAILABLE if there is no way to check
LOCAL_QOSABILITY = (QOSSPBASE+5); // The followings are for
{$EXTERNALSYM LOCAL_QOSABILITY}
// the Discovery of Local QOSability
// -- 0 if no local QOS support
// -- 1 if local QOS support available
// -- INFO_NOT_AVAILABLE if there is no way to check
END_TO_END_QOSABILITY = (QOSSPBASE+6); // The followings are for
{$EXTERNALSYM END_TO_END_QOSABILITY}
// the Discovery of End-to-End QOSability
// -- 0 if no end-to-end QOS support
// -- 1 if end-to-end QOS support available
// -- INFO_NOT_AVAILABLE if there is no way to check
INFO_NOT_AVAILABLE = DWORD($FFFFFFFF); // used when LINE_RATE is not known
{$EXTERNALSYM INFO_NOT_AVAILABLE}
ANY_DEST_ADDR = DWORD($FFFFFFFF); // for QOS_OBJECT_DEST_ADDR
{$EXTERNALSYM ANY_DEST_ADDR}
// The followings are for Guaranteed_Service+Latency -> ISSLOW_Traffic_Class Mapping
MODERATELY_DELAY_SENSITIVE = DWORD($FFFFFFFD);
{$EXTERNALSYM MODERATELY_DELAY_SENSITIVE}
HIGHLY_DELAY_SENSITIVE = DWORD($FFFFFFFE);
{$EXTERNALSYM HIGHLY_DELAY_SENSITIVE}
//
// QOSSP Error Code/Value
//
QOSSP_ERR_BASE = (QOSSPBASE+6000);
{$EXTERNALSYM QOSSP_ERR_BASE}
// No error
GQOS_NO_ERRORCODE = (0);
{$EXTERNALSYM GQOS_NO_ERRORCODE}
GQOS_NO_ERRORVALUE = (0);
{$EXTERNALSYM GQOS_NO_ERRORVALUE}
// Unknown error
GQOS_ERRORCODE_UNKNOWN = DWORD($FFFFFFFF);
{$EXTERNALSYM GQOS_ERRORCODE_UNKNOWN}
GQOS_ERRORVALUE_UNKNOWN = DWORD($FFFFFFFF);
{$EXTERNALSYM GQOS_ERRORVALUE_UNKNOWN}
// Admission (Resource) Error
GQOS_NET_ADMISSION = (QOSSP_ERR_BASE+100);
{$EXTERNALSYM GQOS_NET_ADMISSION}
GQOS_OTHER = (QOSSP_ERR_BASE+100+1);
{$EXTERNALSYM GQOS_OTHER}
GQOS_DELAYBND = (QOSSP_ERR_BASE+100+2);
{$EXTERNALSYM GQOS_DELAYBND}
GQOS_BANDWIDTH = (QOSSP_ERR_BASE+100+3);
{$EXTERNALSYM GQOS_BANDWIDTH}
GQOS_MTU = (QOSSP_ERR_BASE+100+4);
{$EXTERNALSYM GQOS_MTU}
GQOS_FLOW_RATE = (QOSSP_ERR_BASE+100+5);
{$EXTERNALSYM GQOS_FLOW_RATE}
GQOS_PEAK_RATE = (QOSSP_ERR_BASE+100+6);
{$EXTERNALSYM GQOS_PEAK_RATE}
GQOS_AGG_PEAK_RATE = (QOSSP_ERR_BASE+100+7);
{$EXTERNALSYM GQOS_AGG_PEAK_RATE}
// Policy Error
GQOS_NET_POLICY = (QOSSP_ERR_BASE+200);
{$EXTERNALSYM GQOS_NET_POLICY}
GQOS_POLICY_ERROR_UNKNOWN = (QOSSP_ERR_BASE+200+0);
{$EXTERNALSYM GQOS_POLICY_ERROR_UNKNOWN}
GQOS_POLICY_GLOBAL_DEF_FLOW_COUNT = (QOSSP_ERR_BASE+200+1);
{$EXTERNALSYM GQOS_POLICY_GLOBAL_DEF_FLOW_COUNT}
GQOS_POLICY_GLOBAL_GRP_FLOW_COUNT = (QOSSP_ERR_BASE+200+2);
{$EXTERNALSYM GQOS_POLICY_GLOBAL_GRP_FLOW_COUNT}
GQOS_POLICY_GLOBAL_USER_FLOW_COUNT = (QOSSP_ERR_BASE+200+3);
{$EXTERNALSYM GQOS_POLICY_GLOBAL_USER_FLOW_COUNT}
GQOS_POLICY_GLOBAL_UNK_USER_FLOW_COUNT = (QOSSP_ERR_BASE+200+4);
{$EXTERNALSYM GQOS_POLICY_GLOBAL_UNK_USER_FLOW_COUNT}
GQOS_POLICY_SUBNET_DEF_FLOW_COUNT = (QOSSP_ERR_BASE+200+5);
{$EXTERNALSYM GQOS_POLICY_SUBNET_DEF_FLOW_COUNT}
GQOS_POLICY_SUBNET_GRP_FLOW_COUNT = (QOSSP_ERR_BASE+200+6);
{$EXTERNALSYM GQOS_POLICY_SUBNET_GRP_FLOW_COUNT}
GQOS_POLICY_SUBNET_USER_FLOW_COUNT = (QOSSP_ERR_BASE+200+7);
{$EXTERNALSYM GQOS_POLICY_SUBNET_USER_FLOW_COUNT}
GQOS_POLICY_SUBNET_UNK_USER_FLOW_COUNT = (QOSSP_ERR_BASE+200+8);
{$EXTERNALSYM GQOS_POLICY_SUBNET_UNK_USER_FLOW_COUNT}
GQOS_POLICY_GLOBAL_DEF_FLOW_DURATION = (QOSSP_ERR_BASE+200+9);
{$EXTERNALSYM GQOS_POLICY_GLOBAL_DEF_FLOW_DURATION}
GQOS_POLICY_GLOBAL_GRP_FLOW_DURATION = (QOSSP_ERR_BASE+200+10);
{$EXTERNALSYM GQOS_POLICY_GLOBAL_GRP_FLOW_DURATION}
GQOS_POLICY_GLOBAL_USER_FLOW_DURATION = (QOSSP_ERR_BASE+200+11);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -