/********************************************************************/ /** Microsoft LAN Manager **/ /** Copyright(c) Microsoft Corp., 1990-1993 **/ /********************************************************************/ /* :ts=4 */ //** TLCOMMON.H - Common transport layer definitions. // // This file contains definitions for common transport layer items. // #if BACK_FILL // Max header size for backfilling #define MAX_BACKFILL_HDR_SIZE 32 #endif #define PHXSUM(s,d,p,l) (uint)( (uint)*(ushort *)&(s) + \ (uint)*(ushort *)((char *)&(s) + sizeof(ushort)) + \ (uint)*(ushort *)&(d) + \ (uint)*(ushort *)((char *)&(d) + sizeof(ushort)) + \ (uint)((ushort)net_short((p))) + \ (uint)((ushort)net_short((ushort)(l))) ) #define TCP_TA_SIZE (offsetof(TRANSPORT_ADDRESS, Address->Address)+ \ sizeof(TDI_ADDRESS_IP)) extern void PrefetchRcvBuf(IPRcvBuf *Buf); extern ushort XsumSendChain(uint PHXsum, PNDIS_BUFFER BufChain); extern ushort XsumRcvBuf(uint PHXsum, IPRcvBuf *BufChain); extern uint CopyRcvToNdis(IPRcvBuf *RcvBuf, PNDIS_BUFFER DestBuf, uint Size, uint RcvOffset, uint DestOffset); extern uint CopyRcvToMdl(IPRcvBuf *RcvBuf, PMDL DestBuf, uint Size, uint RcvOffset, uint DestOffset); extern TDI_STATUS UpdateConnInfo(PTDI_CONNECTION_INFORMATION ConnInfo, IPOptInfo *OptInfo, IPAddr SrcAddress, ushort SrcPort); extern void* BuildTDIAddress(uchar *Buffer, IPAddr Addr, ushort Port); extern void* AppendTDIAddress(uchar *Buffer, uchar * NextAddress, IPAddr Addr, ushort Port); extern void CopyRcvToBuffer(uchar *DestBuf, IPRcvBuf *SrcRB, uint Size, uint Offset); extern PNDIS_BUFFER CopyFlatToNdis(PNDIS_BUFFER DestBuf, uchar *SrcBuf, uint Size, uint *Offset, uint *BytesCopied); extern PMDL CopyFlatToMdl(PMDL DestBuf, uchar *SrcBuf, uint Size, uint *Offset, uint *BytesCopied); extern void *TLRegisterProtocol(uchar Protocol, void *RcvHandler, void *XmitHandler, void *StatusHandler, void *RcvCmpltHandler, void *PnPHandler, void *ElistHandler); // Differentiate copying to an NDIS_BUFFER and an MDL for Millenniun. On // NT they are the same thing and inlined to the TDI functions. #if MILLEN NTSTATUS TcpipCopyBufferToNdisBuffer ( IN PVOID SourceBuffer, IN ULONG SourceOffset, IN ULONG SourceBytesToCopy, IN PNDIS_BUFFER DestinationNdisBuffer, IN ULONG DestinationOffset, IN PULONG BytesCopied ); #else // MILLEN __inline NTSTATUS TcpipCopyBufferToNdisBuffer ( IN PVOID SourceBuffer, IN ULONG SourceOffset, IN ULONG SourceBytesToCopy, IN PNDIS_BUFFER DestinationNdisBuffer, IN ULONG DestinationOffset, IN PULONG BytesCopied ) { return TdiCopyBufferToMdl( SourceBuffer, SourceOffset, SourceBytesToCopy, DestinationNdisBuffer, DestinationOffset, BytesCopied); } #endif // !MILLEN /* * Routine for TCP checksum. This is defined as calls through a function * pointer which is set to point at the optimal routine for this * processor implementation */ typedef ULONG (* TCPXSUM_ROUTINE)( IN ULONG Checksum, IN PUCHAR Source, IN ULONG Length ); ULONG tcpxsum_xmmi( IN ULONG Checksum, IN PUCHAR Source, IN ULONG Length ); ULONG tcpxsum( IN ULONG Checksum, IN PUCHAR Source, IN ULONG Length );