// Copyright (C) Microsoft Corporation. All rights reserved. #pragma once #pragma region System Family (kernel drivers) with Desktop Family for compat #include #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_DESKTOP) EXTERN_C_START #include #include #if NDIS_SUPPORT_NDIS630 // // TcpRecvSegCoalesceInfo // typedef union _NDIS_RSC_NBL_INFO { struct { USHORT CoalescedSegCount; USHORT DupAckCount; } Info; PVOID Value; } NDIS_RSC_NBL_INFO, *PNDIS_RSC_NBL_INFO; C_ASSERT(sizeof(NDIS_RSC_NBL_INFO) == sizeof(PVOID)); #if defined(NDIS_INCLUDE_LEGACY_NAMES) || !defined(__cplusplus) #define NET_BUFFER_LIST_COALESCED_SEG_COUNT(_NBL) \ (((NDIS_RSC_NBL_INFO*)&NET_BUFFER_LIST_INFO((_NBL), TcpRecvSegCoalesceInfo))->Info.CoalescedSegCount) #define NET_BUFFER_LIST_DUP_ACK_COUNT(_NBL) \ (((NDIS_RSC_NBL_INFO*)&NET_BUFFER_LIST_INFO((_NBL), TcpRecvSegCoalesceInfo))->Info.DupAckCount) #else // defined(NDIS_INCLUDE_LEGACY_NAMES) || !defined(__cplusplus) inline USHORT & NET_BUFFER_LIST_COALESCED_SEG_COUNT( _In_ NET_BUFFER_LIST *Nbl ) { NDIS_RSC_NBL_INFO *Rsc = (NDIS_RSC_NBL_INFO*)&NET_BUFFER_LIST_INFO((Nbl), TcpRecvSegCoalesceInfo); return Rsc->Info.CoalescedSegCount; } inline USHORT const & NET_BUFFER_LIST_COALESCED_SEG_COUNT( _In_ NET_BUFFER_LIST const *Nbl ) { NDIS_RSC_NBL_INFO const *Rsc = (NDIS_RSC_NBL_INFO const*)&NET_BUFFER_LIST_INFO((Nbl), TcpRecvSegCoalesceInfo); return Rsc->Info.CoalescedSegCount; } inline USHORT & NET_BUFFER_LIST_DUP_ACK_COUNT( _In_ NET_BUFFER_LIST *Nbl ) { NDIS_RSC_NBL_INFO *Rsc = (NDIS_RSC_NBL_INFO*)&NET_BUFFER_LIST_INFO((Nbl), TcpRecvSegCoalesceInfo); return Rsc->Info.DupAckCount; } inline USHORT const & NET_BUFFER_LIST_DUP_ACK_COUNT( _In_ NET_BUFFER_LIST const *Nbl ) { NDIS_RSC_NBL_INFO *Rsc = (NDIS_RSC_NBL_INFO const*)&NET_BUFFER_LIST_INFO((Nbl), TcpRecvSegCoalesceInfo); return Rsc->Info.DupAckCount; } #endif // NDIS_INCLUDE_LEGACY_NAMES || !__cplusplus #if NDIS_SUPPORT_NDIS688 inline BOOLEAN NET_BUFFER_LIST_IS_TCP_RSC_SET( _In_ NET_BUFFER_LIST const *Nbl ) { NDIS_RSC_NBL_INFO const *Info = (NDIS_RSC_NBL_INFO const *) &Nbl->NetBufferListInfo[TcpRecvSegCoalesceInfo]; return ((UINT_PTR)Info->Value & 0xFFFFFFFF) != 0; } #endif // NDIS_SUPPORT_NDIS688 #endif // NDIS_SUPPORT_NDIS630 EXTERN_C_END #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_DESKTOP) #pragma endregion