@@ -676,7 +676,7 @@ QuicBindingCreateStatelessOperation(
676676    }
677677
678678    if  (Binding -> StatelessOperCount  >= (uint32_t )MsQuicLib .Settings .MaxBindingStatelessOperations ) {
679-         QuicPacketLogDrop (Binding , CxPlatDataPathRecvDataToRecvPacket (Datagram ),
679+         QuicPacketLogDrop (Binding , GetQuicRxPacket (Datagram ),
680680            "Max binding operations reached" );
681681        goto Exit ;
682682    }
@@ -694,7 +694,7 @@ QuicBindingCreateStatelessOperation(
694694            CXPLAT_CONTAINING_RECORD (TableEntry , QUIC_STATELESS_CONTEXT , TableEntry );
695695
696696        if  (QuicAddrCompare (& ExistingCtx -> RemoteAddress , RemoteAddress )) {
697-             QuicPacketLogDrop (Binding , CxPlatDataPathRecvDataToRecvPacket (Datagram ),
697+             QuicPacketLogDrop (Binding , GetQuicRxPacket (Datagram ),
698698                "Already in stateless oper table" );
699699            goto Exit ;
700700        }
@@ -710,7 +710,7 @@ QuicBindingCreateStatelessOperation(
710710    StatelessCtx  = 
711711        (QUIC_STATELESS_CONTEXT * )CxPlatPoolAlloc (& Worker -> StatelessContextPool );
712712    if  (StatelessCtx  ==  NULL ) {
713-         QuicPacketLogDrop (Binding , CxPlatDataPathRecvDataToRecvPacket (Datagram ),
713+         QuicPacketLogDrop (Binding , GetQuicRxPacket (Datagram ),
714714            "Alloc failure for stateless oper ctx" );
715715        goto Exit ;
716716    }
@@ -753,14 +753,14 @@ QuicBindingQueueStatelessOperation(
753753    )
754754{
755755    if  (MsQuicLib .StatelessRegistration  ==  NULL ) {
756-         QuicPacketLogDrop (Binding , CxPlatDataPathRecvDataToRecvPacket (Datagram ),
756+         QuicPacketLogDrop (Binding , GetQuicRxPacket (Datagram ),
757757            "NULL stateless registration" );
758758        return  FALSE;
759759    }
760760
761761    QUIC_WORKER *  Worker  =  QuicLibraryGetWorker (Datagram );
762762    if  (QuicWorkerIsOverloaded (Worker )) {
763-         QuicPacketLogDrop (Binding , CxPlatDataPathRecvDataToRecvPacket (Datagram ),
763+         QuicPacketLogDrop (Binding , GetQuicRxPacket (Datagram ),
764764            "Stateless worker overloaded (stateless oper)" );
765765        return  FALSE;
766766    }
@@ -780,7 +780,7 @@ QuicBindingQueueStatelessOperation(
780780            sizeof (QUIC_OPERATION ));
781781        QuicPacketLogDrop (
782782            Binding ,
783-             CxPlatDataPathRecvDataToRecvPacket (Datagram ),
783+             GetQuicRxPacket (Datagram ),
784784            "Alloc failure for stateless operation" );
785785        QuicBindingReleaseStatelessOperation (Context , FALSE);
786786        return  FALSE;
@@ -801,8 +801,7 @@ QuicBindingProcessStatelessOperation(
801801{
802802    QUIC_BINDING *  Binding  =  StatelessCtx -> Binding ;
803803    CXPLAT_RECV_DATA *  RecvDatagram  =  StatelessCtx -> Datagram ;
804-     CXPLAT_RECV_PACKET *  RecvPacket  = 
805-         CxPlatDataPathRecvDataToRecvPacket (RecvDatagram );
804+     QUIC_RX_PACKET *  RecvPacket  =  GetQuicRxPacket (RecvDatagram );
806805    QUIC_BUFFER *  SendDatagram  =  NULL ;
807806
808807    CXPLAT_DBG_ASSERT (RecvPacket -> ValidatedHeaderInv );
@@ -893,7 +892,7 @@ QuicBindingProcessStatelessOperation(
893892            SupportedVersions ,
894893            SupportedVersionsLength  *  sizeof (uint32_t ));
895894
896-         CXPLAT_RECV_PACKET *  Packet  =  CxPlatDataPathRecvDataToRecvPacket (RecvDatagram );
895+         QUIC_RX_PACKET *  Packet  =  GetQuicRxPacket (RecvDatagram );
897896        Packet -> ReleaseDeferred  =  FALSE;
898897
899898        QuicTraceLogVerbose (
@@ -922,11 +921,11 @@ QuicBindingProcessStatelessOperation(
922921        PacketLength  >>= 5 ; // Only drop 5 of the 8 bits of randomness. 
923922        PacketLength  +=  QUIC_RECOMMENDED_STATELESS_RESET_PACKET_LENGTH ;
924923
925-         if  (PacketLength  >= RecvPacket -> BufferLength ) {
924+         if  (PacketLength  >= RecvPacket -> AvailBufferLength ) {
926925            // 
927926            // Can't go over the recieve packet's length. 
928927            // 
929-             PacketLength  =  (uint8_t )RecvPacket -> BufferLength  -  1 ;
928+             PacketLength  =  (uint8_t )RecvPacket -> AvailBufferLength  -  1 ;
930929        }
931930
932931        if  (PacketLength  <  QUIC_MIN_STATELESS_RESET_PACKET_LENGTH ) {
@@ -1118,7 +1117,7 @@ QuicBindingQueueStatelessReset(
11181117    CXPLAT_DBG_ASSERT (!((QUIC_SHORT_HEADER_V1 * )Datagram -> Buffer )-> IsLongHeader );
11191118
11201119    if  (Datagram -> BufferLength  <= QUIC_MIN_STATELESS_RESET_PACKET_LENGTH ) {
1121-         QuicPacketLogDrop (Binding , CxPlatDataPathRecvDataToRecvPacket (Datagram ),
1120+         QuicPacketLogDrop (Binding , GetQuicRxPacket (Datagram ),
11221121            "Packet too short for stateless reset" );
11231122        return  FALSE;
11241123    }
@@ -1129,7 +1128,7 @@ QuicBindingQueueStatelessReset(
11291128        // a connection ID. Without a connection ID, a stateless reset token 
11301129        // cannot be generated. 
11311130        // 
1132-         QuicPacketLogDrop (Binding , CxPlatDataPathRecvDataToRecvPacket (Datagram ),
1131+         QuicPacketLogDrop (Binding , GetQuicRxPacket (Datagram ),
11331132            "No stateless reset on exclusive binding" );
11341133        return  FALSE;
11351134    }
@@ -1147,10 +1146,10 @@ QuicBindingPreprocessDatagram(
11471146    _Out_  BOOLEAN *  ReleaseDatagram 
11481147    )
11491148{
1150-     CXPLAT_RECV_PACKET *  Packet  =  CxPlatDataPathRecvDataToRecvPacket (Datagram );
1151-     CxPlatZeroMemory (& Packet -> PacketNumber , sizeof (CXPLAT_RECV_PACKET ) -  sizeof (uint64_t ));
1152-     Packet -> Buffer  =  Datagram -> Buffer ;
1153-     Packet -> BufferLength  =  Datagram -> BufferLength ;
1149+     QUIC_RX_PACKET *  Packet  =  GetQuicRxPacket (Datagram );
1150+     CxPlatZeroMemory (& Packet -> PacketNumber , sizeof (QUIC_RX_PACKET ) -  sizeof (uint64_t ));
1151+     Packet -> AvailBuffer  =  Datagram -> Buffer ;
1152+     Packet -> AvailBufferLength  =  Datagram -> BufferLength ;
11541153
11551154    * ReleaseDatagram  =  TRUE;
11561155
@@ -1219,7 +1218,7 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
12191218BOOLEAN 
12201219QuicBindingShouldRetryConnection (
12211220    _In_  const  QUIC_BINDING *  const  Binding ,
1222-     _In_  CXPLAT_RECV_PACKET *  Packet ,
1221+     _In_  QUIC_RX_PACKET *  Packet ,
12231222    _In_  uint16_t  TokenLength ,
12241223    _In_reads_ (TokenLength )
12251224        const  uint8_t *  Token ,
@@ -1269,7 +1268,7 @@ QuicBindingCreateConnection(
12691268    // QuicLookupAddRemoteHash. 
12701269    // 
12711270
1272-     CXPLAT_RECV_PACKET *  Packet  =  CxPlatDataPathRecvDataToRecvPacket (Datagram );
1271+     QUIC_RX_PACKET *  Packet  =  GetQuicRxPacket (Datagram );
12731272
12741273    // 
12751274    // Pick a stateless worker to process the client hello and if successful, 
@@ -1312,7 +1311,7 @@ QuicBindingCreateConnection(
13121311    // 
13131312
13141313    if  (!QuicLibraryTryAddRefBinding (Binding )) {
1315-         QuicPacketLogDrop (Binding , CxPlatDataPathRecvDataToRecvPacket (Datagram ),
1314+         QuicPacketLogDrop (Binding , GetQuicRxPacket (Datagram ),
13161315            "Clean up in progress" );
13171316        goto Exit ;
13181317    }
@@ -1414,7 +1413,7 @@ QuicBindingDropBlockedSourcePorts(
14141413        if  (BlockedPorts [i ] ==  SourcePort ) {
14151414            QuicPacketLogDrop (
14161415                Binding ,
1417-                 CxPlatDataPathRecvDataToRecvPacket (Datagram ),
1416+                 GetQuicRxPacket (Datagram ),
14181417                "Blocked source port" );
14191418            return  TRUE;
14201419        }
@@ -1438,8 +1437,7 @@ QuicBindingDeliverDatagrams(
14381437    _In_  uint32_t  DatagramChainByteLength 
14391438    )
14401439{
1441-     CXPLAT_RECV_PACKET *  Packet  = 
1442-             CxPlatDataPathRecvDataToRecvPacket (DatagramChain );
1440+     QUIC_RX_PACKET *  Packet  =  GetQuicRxPacket (DatagramChain );
14431441    CXPLAT_DBG_ASSERT (Packet -> ValidatedHeaderInv )
14441442
14451443    // 
@@ -1654,13 +1652,20 @@ QuicBindingReceive(
16541652        DatagramChain  =  Datagram -> Next ;
16551653        Datagram -> Next  =  NULL ;
16561654
1657-         CXPLAT_RECV_PACKET *  Packet  = 
1658-             CxPlatDataPathRecvDataToRecvPacket (Datagram );
1659-         CxPlatZeroMemory (Packet , sizeof (CXPLAT_RECV_PACKET ));
1655+         QUIC_RX_PACKET *  Packet  =  GetQuicRxPacket (Datagram );
16601656        Packet -> PacketId  = 
16611657            PartitionShifted  | InterlockedIncrement64 ((int64_t * )& QuicLibraryGetPerProc ()-> ReceivePacketId );
1662-         Packet -> Buffer  =  Datagram -> Buffer ;
1663-         Packet -> BufferLength  =  Datagram -> BufferLength ;
1658+         Packet -> PacketNumber  =  0 ;
1659+         Packet -> AvailBuffer  =  Datagram -> Buffer ;
1660+         Packet -> DestCid  =  NULL ;
1661+         Packet -> SourceCid  =  NULL ;
1662+         Packet -> AvailBufferLength  =  Datagram -> BufferLength ;
1663+         Packet -> HeaderLength  =  0 ;
1664+         Packet -> PayloadLength  =  0 ;
1665+         Packet -> DestCidLen  =  0 ;
1666+         Packet -> SourceCidLen  =  0 ;
1667+         Packet -> KeyType  =  QUIC_PACKET_KEY_INITIAL ;
1668+         Packet -> Flags  =  0 ;
16641669
16651670        CXPLAT_DBG_ASSERT (Packet -> PacketId  !=  0 );
16661671        QuicTraceEvent (
@@ -1708,8 +1713,7 @@ QuicBindingReceive(
17081713        // the same connection and this chain-splitting step is skipped.) 
17091714        // 
17101715        if  (!Binding -> Exclusive  &&  SubChain  !=  NULL ) {
1711-             CXPLAT_RECV_PACKET *  SubChainPacket  = 
1712-                 CxPlatDataPathRecvDataToRecvPacket (SubChain );
1716+             QUIC_RX_PACKET *  SubChainPacket  =  GetQuicRxPacket (SubChain );
17131717            if  ((Packet -> DestCidLen  !=  SubChainPacket -> DestCidLen  || 
17141718                 memcmp (Packet -> DestCid , SubChainPacket -> DestCid , Packet -> DestCidLen ) !=  0 )) {
17151719                if  (!QuicBindingDeliverDatagrams (Binding , SubChain , SubChainLength , SubChainBytes )) {
0 commit comments