diff --git a/reactos/lib/drivers/ip/network/neighbor.c b/reactos/lib/drivers/ip/network/neighbor.c index dd1bc511035..94755c1f0a4 100644 --- a/reactos/lib/drivers/ip/network/neighbor.c +++ b/reactos/lib/drivers/ip/network/neighbor.c @@ -64,7 +64,6 @@ VOID NBSendPackets( PNEIGHBOR_CACHE_ENTRY NCE ) { /* Must be called with table lock acquired */ VOID NBFlushPacketQueue( PNEIGHBOR_CACHE_ENTRY NCE, - BOOLEAN CallComplete, NTSTATUS ErrorCode ) { PLIST_ENTRY PacketEntry; PNEIGHBOR_PACKET Packet; @@ -81,13 +80,10 @@ VOID NBFlushPacketQueue( PNEIGHBOR_CACHE_ENTRY NCE, ("PacketEntry: %x, NdisPacket %x\n", PacketEntry, Packet->Packet)); - if( CallComplete ) - { - ASSERT_KM_POINTER(Packet->Complete); - Packet->Complete( Packet->Context, - Packet->Packet, - ErrorCode ); - } + ASSERT_KM_POINTER(Packet->Complete); + Packet->Complete( Packet->Context, + Packet->Packet, + ErrorCode ); exFreePool( Packet ); } @@ -117,7 +113,7 @@ VOID NCETimeout( so maybe it's not that big a problem */ /* Flush packet queue */ - NBFlushPacketQueue( NCE, TRUE, NDIS_STATUS_REQUEST_ABORTED ); + NBFlushPacketQueue( NCE, NDIS_STATUS_REQUEST_ABORTED ); NCE->EventCount = 0; } else @@ -213,7 +209,7 @@ VOID NBShutdown(VOID) NextNCE = CurNCE->Next; /* Flush wait queue */ - NBFlushPacketQueue( CurNCE, FALSE, STATUS_SUCCESS ); + NBFlushPacketQueue( CurNCE, NDIS_STATUS_NOT_ACCEPTED ); CurNCE = NextNCE; } @@ -528,7 +524,7 @@ VOID NBRemoveNeighbor( /* Found it, now unlink it from the list */ *PrevNCE = CurNCE->Next; - NBFlushPacketQueue( CurNCE, TRUE, NDIS_STATUS_REQUEST_ABORTED ); + NBFlushPacketQueue( CurNCE, NDIS_STATUS_REQUEST_ABORTED ); exFreePool(CurNCE); break; diff --git a/reactos/lib/drivers/ip/network/router.c b/reactos/lib/drivers/ip/network/router.c index 9ad58478177..2911da9ba85 100644 --- a/reactos/lib/drivers/ip/network/router.c +++ b/reactos/lib/drivers/ip/network/router.c @@ -415,7 +415,6 @@ PFIB_ENTRY RouterCreateRoute( */ { KIRQL OldIrql; - PFIB_ENTRY FIBE; PLIST_ENTRY CurrentEntry; PLIST_ENTRY NextEntry; PFIB_ENTRY Current; @@ -450,13 +449,7 @@ PFIB_ENTRY RouterCreateRoute( return NULL; } - FIBE = RouterAddRoute(NetworkAddress, Netmask, NCE, Metric); - if (!FIBE) { - /* Not enough free resources */ - NBRemoveNeighbor(NCE); - } - - return FIBE; + return RouterAddRoute(NetworkAddress, Netmask, NCE, Metric); } diff --git a/reactos/lib/drivers/ip/transport/datagram/datagram.c b/reactos/lib/drivers/ip/transport/datagram/datagram.c index 6a7bd36ec43..ae6aa490cf9 100644 --- a/reactos/lib/drivers/ip/transport/datagram/datagram.c +++ b/reactos/lib/drivers/ip/transport/datagram/datagram.c @@ -106,7 +106,10 @@ VOID DGDeliverData( while((CurrentEntry != &AddrFile->ReceiveQueue) && (!Found)) { Current = CONTAINING_RECORD(CurrentEntry, DATAGRAM_RECEIVE_REQUEST, ListEntry); - if( DstPort == AddrFile->Port ) { + if( DstPort == AddrFile->Port && + (AddrIsEqual(DstAddress, &AddrFile->Address) || + AddrIsUnspecified(&AddrFile->Address) || + AddrIsUnspecified(DstAddress))) { Found = TRUE; /* Remove the request from the queue */ RemoveEntryList(&Current->ListEntry); diff --git a/reactos/lib/drivers/ip/transport/tcp/accept.c b/reactos/lib/drivers/ip/transport/tcp/accept.c index 989838aebb6..f80d3514655 100644 --- a/reactos/lib/drivers/ip/transport/tcp/accept.c +++ b/reactos/lib/drivers/ip/transport/tcp/accept.c @@ -148,6 +148,7 @@ NTSTATUS TCPAccept ( PTDI_REQUEST Request, Bucket->AssociatedEndpoint = Connection; Bucket->Request.RequestNotifyObject = Complete; Bucket->Request.RequestContext = Context; + IoMarkIrpPending((PIRP)Context); InsertHeadList( &Listener->ListenRequest, &Bucket->Entry ); } else Status = STATUS_NO_MEMORY; diff --git a/reactos/lib/drivers/ip/transport/tcp/tcp.c b/reactos/lib/drivers/ip/transport/tcp/tcp.c index 4b17b5fefd7..800a6519fa9 100644 --- a/reactos/lib/drivers/ip/transport/tcp/tcp.c +++ b/reactos/lib/drivers/ip/transport/tcp/tcp.c @@ -643,6 +643,8 @@ NTSTATUS TCPConnect Bucket->Request.RequestNotifyObject = (PVOID)Complete; Bucket->Request.RequestContext = Context; + IoMarkIrpPending((PIRP)Context); + InsertHeadList( &Connection->ConnectRequest, &Bucket->Entry ); } } @@ -767,8 +769,9 @@ NTSTATUS TCPReceiveData Bucket->Request.RequestContext = Context; *BytesReceived = 0; + IoMarkIrpPending((PIRP)Context); + InsertTailList( &Connection->ReceiveRequest, &Bucket->Entry ); - Status = STATUS_PENDING; TI_DbgPrint(DEBUG_TCP,("Queued read irp\n")); } else { TI_DbgPrint(DEBUG_TCP,("Got status %x, bytes %d\n", Status, Received)); @@ -833,6 +836,8 @@ NTSTATUS TCPSendData Bucket->Request.RequestNotifyObject = Complete; Bucket->Request.RequestContext = Context; *BytesSent = 0; + + IoMarkIrpPending((PIRP)Context); InsertTailList( &Connection->SendRequest, &Bucket->Entry ); TI_DbgPrint(DEBUG_TCP,("Queued write irp\n"));