mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 10:59:41 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			294 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			294 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
{
 | 
						|
    $Id$
 | 
						|
    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;
 | 
						|
 | 
						|
{
 | 
						|
  $Log:
 | 
						|
 | 
						|
}
 |