123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- {
- This file is part of the Free Pascal run time library.
- This unit contains the declarations for the WinSock2
- Socket Library for Netware and Win32
- Copyright (c) 1999-2002 by the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- { This module defines the Quality of Service structures and types used
- by Winsock applications. }
- {
- Definitions for valued-based Service Type for each direction of data flow.
- }
- type
- SERVICETYPE = u_long;
- { No data in this direction }
- const
- SERVICETYPE_NOTRAFFIC = $00000000;
- { Best Effort }
- SERVICETYPE_BESTEFFORT = $00000001;
- { Controlled Load }
- SERVICETYPE_CONTROLLEDLOAD = $00000002;
- { Guaranteed }
- SERVICETYPE_GUARANTEED = $00000003;
- { Used to notify
- change to user }
- SERVICETYPE_NETWORK_UNAVAILABLE = $00000004;
- { corresponds to
- "General Parameters"
- defined by IntServ }
- SERVICETYPE_GENERAL_INFORMATION = $00000005;
- { used to indicate
- that the flow spec
- contains no change
- from any previous
- one }
- SERVICETYPE_NOCHANGE = $00000006;
- { Non-Conforming Traffic }
- SERVICETYPE_NONCONFORMING = $00000009;
- { Custom ServiceType 1 }
- SERVICETYPE_CUSTOM1 = $0000000A;
- { Custom ServiceType 2 }
- SERVICETYPE_CUSTOM2 = $0000000B;
- { Custom ServiceType 3 }
- SERVICETYPE_CUSTOM3 = $0000000C;
- { Custom ServiceType 4 }
- SERVICETYPE_CUSTOM4 = $0000000D;
- {
- Definitions for bitmap-based Service Type for each direction of data flow.
- }
- SERVICE_BESTEFFORT = $80020000;
- SERVICE_CONTROLLEDLOAD = $80040000;
- SERVICE_GUARANTEED = $80080000;
- SERVICE_CUSTOM1 = $80100000;
- SERVICE_CUSTOM2 = $80200000;
- SERVICE_CUSTOM3 = $80400000;
- SERVICE_CUSTOM4 = $80800000;
- {
- Number of available Service Types.
- }
- NUM_SERVICETYPES = 8;
- {
- to turn on immediate traffic control, OR ( | ) this flag with the
- ServiceType field in the FLOWSPEC
- }
- { #define SERVICE_IMMEDIATE_TRAFFIC_CONTROL 0x80000000 // obsolete }
- SERVICE_NO_TRAFFIC_CONTROL = $81000000;
- {
- this flag can be used with the immediate traffic control flag above to
- prevent any rsvp signaling messages from being sent. Local traffic
- control will be invoked, but no RSVP Path messages will be sent.This flag
- can also be used in conjunction with a receiving flowspec to suppress
- the automatic generation of a Reserve message. The application would
- receive notification that a Path message had arrived and would then need
- to alter the QOS by issuing WSAIoctl( SIO_SET_QOS ), to unset this flag
- and thereby cause Reserve messages to go out.
- }
- SERVICE_NO_QOS_SIGNALING = $40000000;
- { rsvp status code }
- STATUS_QOS_RELEASED = $10101010;
- {
- Flow Specifications for each direction of data flow.
- }
- { In Bytes/sec }
- { In Bytes }
- { In Bytes/sec }
- { In microseconds }
- { In microseconds }
- { In Bytes }
- { In Bytes }
- type
- Tflowspec = record
- TokenRate : u_long;
- TokenBucketSize : u_long;
- PeakBandwidth : u_long;
- Latency : u_long;
- DelayVariation : u_long;
- ServiceType : SERVICETYPE;
- MaxSduSize : u_long;
- MinimumPolicedSize : u_long;
- end;
- PFLOWSPEC = ^Tflowspec;
- LPFLOWSPEC = ^Tflowspec;
- {
- this value can be used in the FLOWSPEC structure to instruct the Rsvp Service
- provider to derive the appropriate default value for the parameter. Note
- that not all values in the FLOWSPEC structure can be defaults. In the
- ReceivingFlowspec, all parameters can be defaulted except the ServiceType.
- In the SendingFlowspec, the MaxSduSize and MinimumPolicedSize can be
- defaulted. Other defaults may be possible. Refer to the appropriate
- documentation.
- }
- const
- QOS_NOT_SPECIFIED = $FFFFFFFF;
- NULL_QOS_TYPE = $FFFFFFFD;
- {
- define a value that can be used for the PeakBandwidth, which will map into
- positive infinity when the FLOWSPEC is converted into IntServ floating point
- format. We can't use (-1) because that value was previously defined to mean
- "select the default".
- }
- POSITIVE_INFINITY_RATE = $FFFFFFFE;
- {
- the provider specific structure can have a number of objects in it.
- Each next structure in the
- ProviderSpecific will be the QOS_OBJECT_HDR struct that prefaces the actual
- data with a type and length for that object. This QOS_OBJECT struct can
- repeat several times if there are several objects. This list of objects
- terminates either when the buffer length has been reached ( WSABUF ) or
- an object of type QOS_END_OF_LIST is encountered.
- }
- { the length of object buffer INCLUDING
- this header }
- type
- TQOS_OBJECT_HDR = record
- ObjectType : u_long;
- ObjectLength : u_long;
- end;
- LPQOS_OBJECT_HDR = ^TQOS_OBJECT_HDR;
- PQOS_OBJECT_HDR = ^TQOS_OBJECT_HDR;
- {
- general QOS objects start at this offset from the base and have a range
- of 1000
- }
- const
- QOS_GENERAL_ID_BASE = 2000;
- QOS_OBJECT_PRIORITY = $00000000 + QOS_GENERAL_ID_BASE;
- { QOS_PRIORITY structure passed }
- QOS_OBJECT_END_OF_LIST = $00000001 + QOS_GENERAL_ID_BASE;
- { QOS_End_of_list structure passed }
- QOS_OBJECT_SD_MODE = $00000002 + QOS_GENERAL_ID_BASE;
- { QOS_ShapeDiscard structure passed }
- QOS_OBJECT_TRAFFIC_CLASS = $00000003 + QOS_GENERAL_ID_BASE;
- { QOS_Traffic class structure passed }
- QOS_OBJECT_DESTADDR = $00000004 + QOS_GENERAL_ID_BASE;
- { QOS_DestAddr structure }
- QOS_OBJECT_SHAPER_QUEUE_DROP_MODE = $00000005 + QOS_GENERAL_ID_BASE;
- { QOS_ShaperQueueDropMode structure }
- QOS_OBJECT_SHAPER_QUEUE_LIMIT = $00000006 + QOS_GENERAL_ID_BASE;
- { QOS_ShaperQueueLimit structure }
- {
- This structure defines the absolute priorty of the flow. Priorities in the
- range of 0-7 are currently defined. Receive Priority is not currently used,
- but may at some point in the future.
- }
- { this gets mapped to layer 2 priority. }
- { there are none currently defined. }
- { this could be used to decide who
- gets forwarded up the stack first
- - not used now }
- type
- TQOS_PRIORITY = record
- ObjectHdr : TQOS_OBJECT_HDR;
- SendPriority : u_char;
- SendFlags : u_char;
- ReceivePriority : u_char;
- Unused : u_char;
- end;
- LPQOS_PRIORITY = ^TQOS_PRIORITY;
- PQOS_PRIORITY = ^TQOS_PRIORITY;
- {
- This structure is used to define the behaviour that the traffic
- control packet shaper will apply to the flow.
- PS_NONCONF_BORROW - the flow will receive resources remaining
- after all higher priority flows have been serviced. If a
- TokenRate is specified, packets may be non-conforming and
- will be demoted to less than best-effort priority.
- PS_NONCONF_SHAPE - TokenRate must be specified. Non-conforming
- packets will be retianed in the packet shaper until they become
- conforming.
- PS_NONCONF_DISCARD - TokenRate must be specified. Non-conforming
- packets will be discarded.
- }
- TQOS_SD_MODE = record
- ObjectHdr : TQOS_OBJECT_HDR;
- ShapeDiscardMode : u_long;
- end;
- LPQOS_SD_MODE = ^TQOS_SD_MODE;
- PQOS_SD_MODE = ^TQOS_SD_MODE;
- const
- TC_NONCONF_BORROW = 0;
- TC_NONCONF_SHAPE = 1;
- TC_NONCONF_DISCARD = 2;
- TC_NONCONF_BORROW_PLUS = 3;
- {
- This structure may carry an 802.1 TrafficClass parameter which
- has been provided to the host by a layer 2 network, for example,
- in an 802.1 extended RSVP RESV message. If this object is obtained
- from the network, hosts will stamp the MAC headers of corresponding
- transmitted packets, with the value in the object. Otherwise, hosts
- may select a value based on the standard Intserv mapping of
- ServiceType to 802.1 TrafficClass.
- }
- type
- TQOS_TRAFFIC_CLASS = record
- ObjectHdr : TQOS_OBJECT_HDR;
- TrafficClass : u_long;
- end;
- LPQOS_TRAFFIC_CLASS = ^TQOS_TRAFFIC_CLASS;
- PQOS_TRAFFIC_CLASS = ^TQOS_TRAFFIC_CLASS;
- {
- This structure allows overriding of the default schema used to drop
- packets when a flow's shaper queue limit is reached.
- DropMethod -
- QOS_SHAPER_DROP_FROM_HEAD - Drop packets from
- the head of the queue until the new packet can be
- accepted into the shaper under the current limit. This
- behavior is the default.
- QOS_SHAPER_DROP_INCOMING - Drop the incoming,
- limit-offending packet.
- }
- TQOS_SHAPER_QUEUE_LIMIT_DROP_MODE = record
- ObjectHdr : TQOS_OBJECT_HDR;
- DropMode : u_long;
- end;
- LPQOS_SHAPER_QUEUE_LIMIT_DROP_MODE = ^TQOS_SHAPER_QUEUE_LIMIT_DROP_MODE;
- PQOS_SHAPER_QUEUE_LIMIT_DROP_MODE = ^TQOS_SHAPER_QUEUE_LIMIT_DROP_MODE;
- const
- QOS_SHAPER_DROP_INCOMING = 0;
- QOS_SHAPER_DROP_FROM_HEAD = 1;
- { This structure allows the default per-flow limit on the shaper queue
- size to be overridden.
- QueueSizeLimit - Limit, in bytes, of the size of the shaper queue }
- type
- TQOS_SHAPER_QUEUE_LIMIT = record
- ObjectHdr : TQOS_OBJECT_HDR;
- QueueSizeLimit : u_long;
- end;
- LPQOS_SHAPER_QUEUE_LIMIT = ^TQOS_SHAPER_QUEUE_LIMIT;
- PQOS_SHAPER_QUEUE_LIMIT = ^TQOS_SHAPER_QUEUE_LIMIT;
|