huago-corrcet_tools/HuaGoCorrect/pub/ddk/ndischimney.h

974 lines
27 KiB
C
Raw Normal View History

2020-08-31 08:08:50 +00:00
#ifndef _CHIMNEY_OFFLOAD_
#define _CHIMNEY_OFFLOAD_
#pragma once
#if (defined(NDIS60) || NDIS_WRAPPER || defined(NDIS61) || defined(NDIS620))
//
// This is the encapsulation type used by the stack for TCP connection offload
//
typedef struct _NDIS_TCP_CONNECTION_OFFLOAD_ENCAPSULATION
{
struct
{
UCHAR Enabled;
ULONG EncapsulationType;
ULONG HeaderSize;
}V4;
struct
{
UCHAR Enabled;
ULONG EncapsulationType;
ULONG HeaderSize;
}V6;
}NDIS_TCP_CONNECTION_OFFLOAD_ENCAPSULATION, NDIS_TCP_CONNECTION_OFFLOAD_ENCAPSULATION;
//
// These are the parameters that the stack sets on the NIC to use during
// connection offload by setting OID OID_TCP_CONNECTION_OFFLOAD_PARAMETERS
//
//
// Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
// Header.Revision = NDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS_1;
// Header.Size = sizeof(NDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS);
//
#define NDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS_1 1
#if NDIS_SUPPORT_NDIS61
#define NDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS_2 2
#endif // NDIS_SUPPORT_NDIS61
typedef struct _NDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS
{
NDIS_OBJECT_HEADER Header;
NDIS_OFFLOAD_ENCAPSULATION Encapsulation;
ULONG TicksPerSecond;
UCHAR TcpAckFrequency;
UCHAR TcpDelayedAckTicks;
UCHAR TcpMaximumRetransmissions;
UCHAR TcpDoubtReachabilityRetransmissions;
ULONG TcpSwsPreventionTicks;
ULONG TcpDuplicateAckThreshold;
ULONG TcpPushTicks;
ULONG NceStaleTicks;
#if NDIS_SUPPORT_NDIS61
ULONG CongestionAlgorithm;
#endif // NDIS_SUPPORT_NDIS61
} NDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS, *PNDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS;
#define NDIS_SIZEOF_TCP_CONNECTION_OFFLOAD_PARAMETERS_REVISION_1 \
RTL_SIZEOF_THROUGH_FIELD(NDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS, NceStaleTicks)
#if NDIS_SUPPORT_NDIS61
#define NDIS_SIZEOF_TCP_CONNECTION_OFFLOAD_PARAMETERS_REVISION_2 \
RTL_SIZEOF_THROUGH_FIELD(NDIS_TCP_CONNECTION_OFFLOAD_PARAMETERS, CongestionAlgorithm)
#endif // NDIS_SUPPORT_NDIS61
//
// NDIS_CHIMNEY_OFFLOAD_TYPE
//
// Specifies the chimney type.
//
typedef enum
{
NdisTcpChimneyOffload = 1,
NdisIpsecChimneyOffload,
NdisRdmaChimneyOffload,
NdisMaxChimneyOffload
} NDIS_CHIMNEY_OFFLOAD_TYPE, *PNDIS_CHIMNEY_OFFLOAD_TYPE;
//
// INDICATE_OFFLOAD_EVENT
//
// Qualifies a Offload Event indication.
//
typedef enum
{
NeighborReachabilityInDoubt = 0x0001,
NeighborReachabilityQuery,
MaxOffloadEvent
} INDICATE_OFFLOAD_EVENT, *PINDICATE_OFFLOAD_EVENT;
//
// OFFLOAD_STATE_TYPE
//
// State type at each layer in the stack.
//
typedef enum
{
NeighborOffloadConstState = 0x1,
NeighborOffloadCachedState,
NeighborOffloadDelegatedState,
NeighborOffloadState,
Ip4OffloadConstState,
Ip4OffloadCachedState,
Ip4OffloadDelegatedState,
Ip4OffloadState,
Ip6OffloadConstState,
Ip6OffloadCachedState,
Ip6OffloadDelegatedState,
Ip6OffloadState,
TcpOffloadConstState,
TcpOffloadCachedState,
TcpOffloadDelegatedState,
TcpOffloadResourceState,
TcpOffloadState,
FilterReservedOffloadState = 0xFE,
MaximumOffloadState
} OFFLOAD_STATE_TYPE, *POFFLOAD_STATE_TYPE;
//
// OFFLOAD_STATE_HEADER
//
// Offload state header, precedes each offload state.
//
typedef struct _OFFLOAD_STATE_HEADER
{
ULONG Length;
ULONG RecognizedOptions;
} OFFLOAD_STATE_HEADER, *POFFLOAD_STATE_HEADER;
//
//
// TCP_OFFLOAD_CONNECTION_STATE
//
// TCP connection state [RFC 793].
//
typedef enum
{
TcpConnectionClosed,
TcpConnectionListen,
TcpConnectionSynSent,
TcpConnectionSynRcvd,
TcpConnectionEstablished,
TcpConnectionFinWait1,
TcpConnectionFinWait2,
TcpConnectionCloseWait,
TcpConnectionClosing,
TcpConnectionLastAck,
TcpConnectionTimeWait,
TcpConnectionMaxState
} TCP_OFFLOAD_CONNECTION_STATE, *PTCP_OFFLOAD_CONNECTION_STATE;
//
// TCP_UPLOAD_REASON
//
// Reason for upoloading an offloaded TCP connection back to the host.
//
typedef enum
{
LowActivity = 1,
HighDropRate,
SmallIO,
NoBufferProposting,
ReceivedUrgentData,
HighFragmentation,
HighOutOfOrderPackets,
TimeoutExpiration,
InvalidState,
UploadRequested,
HardwareFailure,
MaxUploadReason
} TCP_UPLOAD_REASON, *PTCP_UPLOAD_REASON;
//
// Qualifies a disconnect event or a disconnect request on a TCP connection.
//
#define TCP_DISCONNECT_GRACEFUL_CLOSE 0x01
#define TCP_DISCONNECT_ABORTIVE_CLOSE 0x02
//
// TCP_OFFLOAD_EVENT_TYPE
//
// Event indications possible on an offloaded TCP connection.
//
typedef enum
{
TcpIndicateSendBacklogChange = 1,
TcpIndicateDisconnect,
TcpIndicateRetrieve,
TcpIndicateAbort
} TCP_OFFLOAD_EVENT_TYPE, *PTCP_OFFLOAD_EVENT_TYPE;
//
// Flags part of the TCP constant state.
//
#define TCP_FLAG_TIMESTAMP_ENABLED 0x01
#define TCP_FLAG_SACK_ENABLED 0x02
#define TCP_FLAG_WINDOW_SCALING_ENABLED 0x04
//
// TCP_OFFLOAD_STATE_CONST
//
// Constant fields of a Connection.
//
typedef struct _TCP_OFFLOAD_STATE_CONST
{
OFFLOAD_STATE_HEADER Header;
USHORT Flags;
USHORT RemotePort;
USHORT LocalPort;
UCHAR SndWindScale: 4;
UCHAR RcvWindScale: 4;
USHORT RemoteMss;
ULONG HashValue;
} TCP_OFFLOAD_STATE_CONST, *PTCP_OFFLOAD_STATE_CONST;
//
// Flags part of the TCP cached state.
//
#define TCP_FLAG_KEEP_ALIVE_ENABLED 0x01
#define TCP_FLAG_NAGLING_ENABLED 0x02
#define TCP_FLAG_KEEP_ALIVE_RESTART 0x04
#define TCP_FLAG_MAX_RT_RESTART 0x08
#define TCP_FLAG_UPDATE_RCV_WND 0x10
//
// TCP_OFFLOAD_STATE_CACHED
//
// Cached fields of a TCB.
//
typedef struct _TCP_OFFLOAD_STATE_CACHED
{
OFFLOAD_STATE_HEADER Header;
USHORT Flags;
ULONG InitialRcvWnd;
ULONG RcvIndicationSize;
UCHAR KaProbeCount;
ULONG KaTimeout;
ULONG KaInterval;
ULONG MaxRT;
ULONG FlowLabel:20;
UCHAR TtlOrHopLimit;
UCHAR TosOrTrafficClass;
UCHAR UserPriority:3;
} TCP_OFFLOAD_STATE_CACHED, *PTCP_OFFLOAD_STATE_CACHED;
//
// TCP_OFFLOAD_STATE_DELEGATED
//
// Delegated fields of a TCB.
//
typedef struct _TCP_OFFLOAD_STATE_DELEGATED
{
OFFLOAD_STATE_HEADER Header;
TCP_OFFLOAD_CONNECTION_STATE State;
USHORT Flags;
ULONG RcvNxt;
ULONG RcvWnd;
ULONG SndUna;
ULONG SndNxt;
ULONG SndMax;
ULONG SndWnd;
ULONG MaxSndWnd;
ULONG SendWL1;
ULONG CWnd;
ULONG SsThresh;
USHORT SRtt;
USHORT RttVar;
ULONG TsRecent;
ULONG TsRecentAge;
ULONG TsTime;
ULONG TotalRT;
UCHAR DupAckCount;
UCHAR SndWndProbeCount;
struct
{
UCHAR ProbeCount;
ULONG TimeoutDelta;
} KeepAlive;
struct
{
UCHAR Count;
ULONG TimeoutDelta;
} Retransmit;
union
{
struct
{
PNET_BUFFER_LIST SendDataHead;
PNET_BUFFER_LIST SendDataTail;
};
ULONG SendBacklogSize;
};
union
{
PNET_BUFFER_LIST BufferedData;
ULONG ReceiveBacklogSize;
};
#if NDIS_SUPPORT_NDIS61
ULONG DWnd;
#endif // NDIS_SUPPORT_NDIS61
} TCP_OFFLOAD_STATE_DELEGATED, *PTCP_OFFLOAD_STATE_DELEGATED;
//
// PATH_OFFLOAD_STATE_CONST
//
// IP path constant parameters.
//
typedef struct _PATH_OFFLOAD_STATE_CONST
{
OFFLOAD_STATE_HEADER Header;
CONST UCHAR *SourceAddress;
CONST UCHAR *DestinationAddress;
} PATH_OFFLOAD_STATE_CONST, *PPATH_OFFLOAD_STATE_CONST;
//
// PATH_OFFLOAD_STATE_CACHED
//
// IP path cached parameters.
//
typedef struct _PATH_OFFLOAD_STATE_CACHED
{
OFFLOAD_STATE_HEADER Header;
ULONG PathMtu;
} PATH_OFFLOAD_STATE_CACHED, *PPATH_OFFLOAD_STATE_CACHED;
//
// PATH_OFFLOAD_STATE_DELEGATED
//
// IP path delegated parameters.
//
typedef struct _PATH_OFFLOAD_STATE_DELEGATED
{
OFFLOAD_STATE_HEADER Header;
} PATH_OFFLOAD_STATE_DELEGATED, *PPATH_OFFLOAD_STATE_DELEGATED;
//
// NEIGHBOR_OFFLOAD_STATE_CONST
//
// Neighbor const parameters.
//
typedef struct _NEIGHBOR_OFFLOAD_STATE_CONST
{
OFFLOAD_STATE_HEADER Header;
UCHAR DlSourceAddress[32];
ULONG VlanId: 12;
} NEIGHBOR_OFFLOAD_STATE_CONST, *PNEIGHBOR_OFFLOAD_STATE_CONST;
//
// NEIGHBOR_OFFLOAD_STATE_CACHED
//
// Neighbor cached parameters.
//
typedef struct _NEIGHBOR_OFFLOAD_STATE_CACHED
{
OFFLOAD_STATE_HEADER Header;
UCHAR DlDestinationAddress[32];
ULONG HostReachabilityDelta;
} NEIGHBOR_OFFLOAD_STATE_CACHED, *PNEIGHBOR_OFFLOAD_STATE_CACHED;
//
// NEIGHBOR_OFFLOAD_STATE_DELEGATED
//
// Neighbor cached parameters.
//
typedef struct _NEIGHBOR_OFFLOAD_STATE_DELEGATED
{
OFFLOAD_STATE_HEADER Header;
ULONG NicReachabilityDelta;
} NEIGHBOR_OFFLOAD_STATE_DELEGATED, *PNEIGHBOR_OFFLOAD_STATE_DELEGATED;
//
// TCP_OFFLOAD_STATS
//
// Statistics definitions in TCP on a per interface basis
//
typedef struct _TCP_OFFLOAD_STATS
{
ULONG64 InSegments;
ULONG64 OutSegments;
ULONG CurrentlyEstablished;
ULONG ResetEstablished;
ULONG RetransmittedSegments;
ULONG InErrors;
ULONG OutResets;
} TCP_OFFLOAD_STATS, *PTCP_OFFLOAD_STATS;
//
// IP_OFFLOAD_STATS
//
// Stats definitions in IPV4/IPV6 on a per interface basis
//
typedef struct _IP_OFFLOAD_STATS
{
ULONG64 InReceives;
ULONG64 InOctets;
ULONG64 InDelivers;
ULONG64 OutRequests;
ULONG64 OutOctets;
ULONG InHeaderErrors;
ULONG InTruncatedPackets;
ULONG InDiscards;
ULONG OutDiscards;
ULONG OutNoRoutes;
} IP_OFFLOAD_STATS, *PIP_OFFLOAD_STATS;
typedef struct _NDIS_OFFLOAD_HANDLE
{
PVOID NdisReserved[1];
PVOID MiniportOffloadContext;
} NDIS_OFFLOAD_HANDLE, *PNDIS_OFFLOAD_HANDLE;
//
// Internal wrapper sround NDIS_OFFLOAD_HANDLE.
// ProtocolBindingContext is required for handling Receive Indications in FL.
//
typedef struct _NDIS_OFFLOAD_HANDLE_PRIVATE
{
NDIS_OFFLOAD_HANDLE Handle;
PVOID ProtocolBindingContext;
} NDIS_OFFLOAD_HANDLE_PRIVATE, *PNDIS_OFFLOAD_HANDLE_PRIVATE;
typedef struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST
{
IN NDIS_OBJECT_HEADER Header;
IN struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST *NextBlock;
IN struct _NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST *DependentBlockList;
OUT NDIS_STATUS Status;
IN PVOID NdisReserved[3];
IN OUT PNDIS_OFFLOAD_HANDLE OffloadHandle;
IN PVOID ProtocolReserved[2];
IN PVOID MiniportReserved[2];
IN PVOID ImReserved[2];
IN PVOID Scratch[2];
IN PVOID SourceHandle;
IN NDIS_PORT_NUMBER PortNumber;
IN OUT PNET_BUFFER_LIST NetBufferListChain;
//
// The state specific information (if any) will follow this.
//
} NDIS_PROTOCOL_OFFLOAD_BLOCK_LIST, *PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST;
//
// Generic offload functions supported by the protocol.
//
typedef
VOID
(*INITIATE_OFFLOAD_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
typedef
VOID
(*TERMINATE_OFFLOAD_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
typedef
VOID
(*INVALIDATE_OFFLOAD_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
typedef
VOID
(*UPDATE_OFFLOAD_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
typedef
VOID
(*QUERY_OFFLOAD_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
//
// Generic indication handlers supported by the protocol.
//
typedef
VOID
(*INDICATE_OFFLOAD_EVENT_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList,
IN ULONG IndicationCode
);
//
// Tcp offload specific functions supported by the protocol, for completions.
//
typedef
VOID
(*TCP_OFFLOAD_SEND_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
VOID
(*TCP_OFFLOAD_RECV_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
VOID
(*TCP_OFFLOAD_DISCONNECT_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
VOID
(*TCP_OFFLOAD_FORWARD_COMPLETE_HANDLER)(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNET_BUFFER_LIST NetBufferList
);
//
// Tcp offload specific functions supported by the protocol, for indications.
//
typedef
VOID
(*TCP_OFFLOAD_EVENT_HANDLER)(
IN PVOID OffloadContext,
IN ULONG EventType,
IN ULONG EventSpecificInformation
);
typedef
NDIS_STATUS
(*TCP_OFFLOAD_RECEIVE_INDICATE_HANDLER)(
IN PVOID OffloadContext,
IN PNET_BUFFER_LIST NetBufferList,
IN NDIS_STATUS Status,
OUT PULONG BytesConsumed
);
typedef struct _NDIS_OFFLOAD_CLIENT_HANDLERS
{
NDIS_OBJECT_HEADER Header;
} NDIS_OFFLOAD_CLIENT_HANDLERS, *PNDIS_OFFLOAD_CLIENT_HANDLERS;
typedef struct _NDIS_TCP_OFFLOAD_CLIENT_HANDLERS
{
NDIS_OBJECT_HEADER Header;
TCP_OFFLOAD_SEND_COMPLETE_HANDLER TcpOffloadSendCompleteHandler;
TCP_OFFLOAD_RECV_COMPLETE_HANDLER TcpOffloadReceiveCompleteHandler;
TCP_OFFLOAD_DISCONNECT_COMPLETE_HANDLER TcpOffloadDisconnectCompleteHandler;
TCP_OFFLOAD_FORWARD_COMPLETE_HANDLER TcpOffloadForwardCompleteHandler;
TCP_OFFLOAD_EVENT_HANDLER TcpOffloadEventHandler;
TCP_OFFLOAD_RECEIVE_INDICATE_HANDLER TcpOffloadReceiveIndicateHandler;
} NDIS_TCP_OFFLOAD_CLIENT_HANDLERS, *PNDIS_TCP_OFFLOAD_CLIENT_HANDLERS;
#define NDIS_CLIENT_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS_REVISION_1 1
typedef struct _NDIS_CLIENT_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS
{
NDIS_OBJECT_HEADER Header; // Header.Type = NDIS_OBJECT_TYPE_CLIENT_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS
ULONG Flags;
//
// Generic Offload initiation and termination completion handlers.
//
INITIATE_OFFLOAD_COMPLETE_HANDLER InitiateOffloadCompleteHandler;
TERMINATE_OFFLOAD_COMPLETE_HANDLER TerminateOffloadCompleteHandler;
//
// Generic offload state control request completion handlers.
//
UPDATE_OFFLOAD_COMPLETE_HANDLER UpdateOffloadCompleteHandler;
INVALIDATE_OFFLOAD_COMPLETE_HANDLER InvalidateOffloadCompleteHandler;
QUERY_OFFLOAD_COMPLETE_HANDLER QueryOffloadCompleteHandler;
//
// Generic offload state indication handlers.
//
INDICATE_OFFLOAD_EVENT_HANDLER IndicateOffloadEventHandler;
} NDIS_CLIENT_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS, *PNDIS_CLIENT_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS;
#define NDIS_SIZEOF_CLIENT_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS_REVISION_1 \
RTL_SIZEOF_THROUGH_FIELD(NDIS_CLIENT_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS, IndicateOffloadEventHandler)
#define NDIS_CLIENT_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS_REVISION_1 1
typedef struct _NDIS_CLIENT_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS
{
NDIS_OBJECT_HEADER Header; // Header.Type = NDIS_OBJECT_TYPE_CLIENT_CHIMNEY_OFFLOAD_CHARACTERISTICS
ULONG Flags;
NDIS_CHIMNEY_OFFLOAD_TYPE OffloadType; // NdisTcpChimneyOffload
TCP_OFFLOAD_SEND_COMPLETE_HANDLER TcpOffloadSendCompleteHandler;
TCP_OFFLOAD_RECV_COMPLETE_HANDLER TcpOffloadReceiveCompleteHandler;
TCP_OFFLOAD_DISCONNECT_COMPLETE_HANDLER TcpOffloadDisconnectCompleteHandler;
TCP_OFFLOAD_FORWARD_COMPLETE_HANDLER TcpOffloadForwardCompleteHandler;
TCP_OFFLOAD_EVENT_HANDLER TcpOffloadEventHandler;
TCP_OFFLOAD_RECEIVE_INDICATE_HANDLER TcpOffloadReceiveIndicateHandler;
} NDIS_CLIENT_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS, *PNDIS_CLIENT_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS;
#define NDIS_SIZEOF_CLIENT_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS_REVISION_1 \
RTL_SIZEOF_THROUGH_FIELD(NDIS_CLIENT_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS, TcpOffloadReceiveIndicateHandler)
//
// Generic offload functions supported by NDIS, for use by the protocol.
//
EXPORT
VOID
NdisInitiateOffload(
IN NDIS_HANDLE NdisBindingHandle,
IN OUT PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
EXPORT
VOID
NdisTerminateOffload(
IN NDIS_HANDLE NdisBindingHandle,
IN OUT PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
EXPORT
VOID
NdisInvalidateOffload(
IN NDIS_HANDLE NdisBindingHandle,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
EXPORT
VOID
NdisUpdateOffload(
IN NDIS_HANDLE NdisBindingHandle,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
EXPORT
VOID
NdisQueryOffloadState(
IN NDIS_HANDLE NdisBindingHandle,
IN PNDIS_PROTOCOL_OFFLOAD_BLOCK_LIST OffloadBlockList
);
//
// Tcp specific offload functions supported by NDIS, for use by the protocol.
//
EXPORT
NDIS_STATUS
NdisOffloadTcpSend(
IN PNDIS_OFFLOAD_HANDLE NdisOffloadHandle,
IN PNET_BUFFER_LIST NetBufferList
);
EXPORT
NDIS_STATUS
NdisOffloadTcpReceive(
IN PNDIS_OFFLOAD_HANDLE NdisOffloadHandle,
IN PNET_BUFFER_LIST NetBufferList
);
EXPORT
NDIS_STATUS
NdisOffloadTcpDisconnect(
IN PNDIS_OFFLOAD_HANDLE NdisOffloadHandle,
IN PNET_BUFFER_LIST NetBufferList,
IN ULONG Flags
);
EXPORT
NDIS_STATUS
NdisOffloadTcpForward(
IN PNDIS_OFFLOAD_HANDLE NdisOffloadHandle,
IN PNET_BUFFER_LIST NetBufferList
);
VOID
NdisOffloadTcpReceiveReturn(
IN NDIS_HANDLE NdisBindingHandle,
IN PNET_BUFFER_LIST NetBufferList
);
typedef struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST
{
IN NDIS_OBJECT_HEADER Header;
IN struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *NextBlock;
IN struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *DependentBlockList;
OUT NDIS_STATUS Status;
IN PVOID NdisReserved[2];
IN OUT PVOID *MiniportOffloadContext;
IN NDIS_HANDLE NdisOffloadHandle;
IN PVOID ProtocolReserved[2];
IN PVOID MiniportReserved[2];
IN PVOID ImReserved[2];
IN PVOID Scratch[2];
IN PVOID SourceHandle;
IN NDIS_PORT_NUMBER PortNumber;
IN OUT PNET_BUFFER_LIST NetBufferListChain;
//
// The state specific information (if any) will follow this.
//
} NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, *PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
//
// Generic offload functions supported by the miniport.
//
typedef
VOID
(*W_INITIATE_OFFLOAD_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN OUT PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
typedef
VOID
(*W_TERMINATE_OFFLOAD_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN OUT PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
typedef
VOID
(*W_INVALIDATE_OFFLOAD_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
typedef
VOID
(*W_UPDATE_OFFLOAD_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
typedef
VOID
(*W_QUERY_OFFLOAD_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN OUT PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
//
// Tcp specific offload functions supported by the miniport.
//
typedef
NDIS_STATUS
(*W_TCP_OFFLOAD_SEND_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID MiniportOffloadContext,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
NDIS_STATUS
(*W_TCP_OFFLOAD_RECEIVE_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID MiniportOffloadContext,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
NDIS_STATUS
(*W_TCP_OFFLOAD_DISCONNECT_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID MiniportOffloadContext,
IN PNET_BUFFER_LIST NetBufferList,
IN ULONG Flags
);
typedef
NDIS_STATUS
(*W_TCP_OFFLOAD_FORWARD_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PVOID MiniportOffloadContext,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
NDIS_STATUS
(*W_TCP_OFFLOAD_RECEIVE_RETURN_HANDLER)(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNET_BUFFER_LIST NetBufferList
);
typedef struct _NDIS_PROVIDER_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS
{
NDIS_OBJECT_HEADER Header; // Header.Type = NDIS_OBJECT_TYPE_PROVIDER_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS
ULONG Flags;
//
// Generic Offload initiation and termination handlers.
//
W_INITIATE_OFFLOAD_HANDLER InitiateOffloadHandler;
W_TERMINATE_OFFLOAD_HANDLER TerminateOffloadHandler;
//
// Generic offload state control functions.
//
W_UPDATE_OFFLOAD_HANDLER UpdateOffloadHandler;
W_INVALIDATE_OFFLOAD_HANDLER InvalidateOffloadHandler;
W_QUERY_OFFLOAD_HANDLER QueryOffloadHandler;
} NDIS_PROVIDER_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS, *PNDIS_PROVIDER_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS;
typedef struct _NDIS_PROVIDER_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS
{
NDIS_OBJECT_HEADER Header; // Header.Type = NDIS_OBJECT_TYPE_PROVIDER_CHIMNEY_OFFLOAD_CHARACTERISTICS
ULONG Flags;
NDIS_CHIMNEY_OFFLOAD_TYPE OffloadType; // NdisTcpChimneyOffload
//
// TCP function handlers
//
W_TCP_OFFLOAD_SEND_HANDLER TcpOffloadSendHandler;
W_TCP_OFFLOAD_RECEIVE_HANDLER TcpOffloadReceiveHandler;
W_TCP_OFFLOAD_DISCONNECT_HANDLER TcpOffloadDisconnectHandler;
W_TCP_OFFLOAD_FORWARD_HANDLER TcpOffloadForwardHandler;
//
// Receive return handler.
//
W_TCP_OFFLOAD_RECEIVE_RETURN_HANDLER TcpOffloadReceiveReturnHandler;
} NDIS_PROVIDER_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS, *PNDIS_PROVIDER_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS;
//
// Generic offload functions supported by NDIS for use by the miniport.
//
EXPORT
VOID
NdisMInitiateOffloadComplete(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
EXPORT
VOID
NdisMTerminateOffloadComplete(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
EXPORT
VOID
NdisMInvalidateOffloadComplete(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
EXPORT
VOID
NdisMUpdateOffloadComplete(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
EXPORT
VOID
NdisMQueryOffloadStateComplete(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList
);
//
// Generic offload event indication handlers.
//
EXPORT
VOID
NdisMOffloadEventIndicate(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST OffloadBlockList,
IN ULONG IndicationCode
);
//
// Tcp offload specific functions supported by NDIS used for completions.
//
typedef
VOID
(*NDIS_TCP_OFFLOAD_SEND_COMPLETE)(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
VOID
(*NDIS_TCP_OFFLOAD_RECEIVE_COMPLETE)(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
VOID
(*NDIS_TCP_OFFLOAD_DISCONNECT_COMPLETE)(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNET_BUFFER_LIST NetBufferList
);
typedef
VOID
(*NDIS_TCP_OFFLOAD_FORWARD_COMPLETE)(
IN NDIS_HANDLE NdisMiniportHandle,
IN PNET_BUFFER_LIST NetBufferList
);
//
// Tcp offload specific functions supported by NDIS used for indication.
//
typedef
VOID
(*NDIS_TCP_OFFLOAD_EVENT_INDICATE)(
IN NDIS_HANDLE NdisOffloadHandle,
IN ULONG EventType,
IN ULONG EventSpecificInformation
);
typedef
NDIS_STATUS
(*NDIS_TCP_OFFLOAD_RECEIVE_INDICATE)(
IN NDIS_HANDLE NdisOffloadHandle,
IN PNET_BUFFER_LIST NetBufferList,
IN NDIS_STATUS Status,
OUT PULONG BytesConsumed
);
typedef struct _NDIS_OFFLOAD_EVENT_HANDLERS
{
NDIS_OBJECT_HEADER Header;
} NDIS_OFFLOAD_EVENT_HANDLERS, *PNDIS_OFFLOAD_EVENT_HANDLERS;
EXPORT
NDIS_STATUS
NdisMGetOffloadHandlers(
IN NDIS_HANDLE NdisMiniportHandle,
IN NDIS_CHIMNEY_OFFLOAD_TYPE ChimneyType,
OUT PNDIS_OFFLOAD_EVENT_HANDLERS *OffloadHandlers
);
#define NDIS_OBJECT_TCP_OFFLOAD_REVISION_1 1
typedef struct _NDIS_TCP_OFFLOAD_EVENT_HANDLERS
{
NDIS_OBJECT_HEADER Header;
NDIS_TCP_OFFLOAD_EVENT_INDICATE NdisTcpOffloadEventHandler;
NDIS_TCP_OFFLOAD_RECEIVE_INDICATE NdisTcpOffloadReceiveHandler;
NDIS_TCP_OFFLOAD_SEND_COMPLETE NdisTcpOffloadSendComplete;
NDIS_TCP_OFFLOAD_RECEIVE_COMPLETE NdisTcpOffloadReceiveComplete;
NDIS_TCP_OFFLOAD_DISCONNECT_COMPLETE NdisTcpOffloadDisconnectComplete;
NDIS_TCP_OFFLOAD_FORWARD_COMPLETE NdisTcpOffloadForwardComplete;
} NDIS_TCP_OFFLOAD_EVENT_HANDLERS, *PNDIS_TCP_OFFLOAD_EVENT_HANDLERS;
#define NDIS_SIZEOF_TCP_OFFLOAD_EVENT_HANDLERS_REVISION_1 \
RTL_SIZEOF_THROUGH_FIELD(NDIS_TCP_OFFLOAD_EVENT_HANDLERS, NdisTcpOffloadForwardComplete)
#endif //#if (defined(NDIS60) || NDIS_WRAPPER || defined(NDIS61))
#endif //_CHIMNEY_OFFLOAD