Author: cgutman
Date: Sat Jan  9 17:25:11 2010
New Revision: 45016

URL: http://svn.reactos.org/svn/reactos?rev=45016&view=rev
Log:
 - Unlock the address file before calling IPSendDatagram
 - We don't need to be locked anymore at that point and it also causes problems 
with loopback packets
 - Use the TTL value stored in the address file for ICMP packets

Modified:
    branches/aicom-network-branch/lib/drivers/ip/network/icmp.c
    branches/aicom-network-branch/lib/drivers/ip/transport/rawip/rawip.c
    branches/aicom-network-branch/lib/drivers/ip/transport/udp/udp.c

Modified: branches/aicom-network-branch/lib/drivers/ip/network/icmp.c
URL: 
http://svn.reactos.org/svn/reactos/branches/aicom-network-branch/lib/drivers/ip/network/icmp.c?rev=45016&r1=45015&r2=45016&view=diff
==============================================================================
--- branches/aicom-network-branch/lib/drivers/ip/network/icmp.c [iso-8859-1] 
(original)
+++ branches/aicom-network-branch/lib/drivers/ip/network/icmp.c [iso-8859-1] 
Sat Jan  9 17:25:11 2010
@@ -48,6 +48,7 @@
 
 
 BOOLEAN PrepareICMPPacket(
+    PADDRESS_FILE AddrFile,
     PIP_INTERFACE Interface,
     PIP_PACKET IPPacket,
     PIP_ADDRESS Destination,
@@ -114,8 +115,11 @@
     IPHeader->Id = (USHORT)Random();
     /* One fragment at offset 0 */
     IPHeader->FlagsFragOfs = 0;
-    /* Time-to-Live is 128 */
-    IPHeader->Ttl = 128;
+    /* Set TTL */
+    if (AddrFile)
+        IPHeader->Ttl = AddrFile->TTL;
+    else
+        IPHeader->Ttl = 128;
     /* Internet Control Message Protocol */
     IPHeader->Protocol = IPPROTO_ICMP;
     /* Checksum is 0 (for later calculation of this) */
@@ -205,30 +209,27 @@
         }
     }
 
-    Status = PrepareICMPPacket( NCE->Interface,
+    Status = PrepareICMPPacket( AddrFile,
+                                NCE->Interface,
                                 &Packet,
                                 &RemoteAddress,
                                 BufferData,
                                 DataSize );
 
+    UnlockObject(AddrFile, OldIrql);
+
     if( !NT_SUCCESS(Status) )
-    {
-        UnlockObject(AddrFile, OldIrql);
        return Status;
-    }
 
     TI_DbgPrint(MID_TRACE,("About to send datagram\n"));
 
     if (!NT_SUCCESS(Status = IPSendDatagram( &Packet, NCE, 
ICMPSendPacketComplete, NULL )))
     {
-        UnlockObject(AddrFile, OldIrql);
         FreeNdisPacket(Packet.NdisPacket);
         return Status;
     }
 
     TI_DbgPrint(MID_TRACE,("Leaving\n"));
-
-    UnlockObject(AddrFile, OldIrql);
 
     return STATUS_SUCCESS;
 }
@@ -352,7 +353,7 @@
 
     DataSize = IPPacket->TotalSize - IPPacket->HeaderSize;
 
-    if( !PrepareICMPPacket(Interface, &NewPacket, &IPPacket->SrcAddr,
+    if( !PrepareICMPPacket(NULL, Interface, &NewPacket, &IPPacket->SrcAddr,
                           IPPacket->Data, DataSize) ) return;
 
     ((PICMP_HEADER)NewPacket.Data)->Type     = Type;

Modified: branches/aicom-network-branch/lib/drivers/ip/transport/rawip/rawip.c
URL: 
http://svn.reactos.org/svn/reactos/branches/aicom-network-branch/lib/drivers/ip/transport/rawip/rawip.c?rev=45016&r1=45015&r2=45016&view=diff
==============================================================================
--- branches/aicom-network-branch/lib/drivers/ip/transport/rawip/rawip.c 
[iso-8859-1] (original)
+++ branches/aicom-network-branch/lib/drivers/ip/transport/rawip/rawip.c 
[iso-8859-1] Sat Jan  9 17:25:11 2010
@@ -249,24 +249,20 @@
                                BufferData,
                                DataSize );
 
+    UnlockObject(AddrFile, OldIrql);
+
     if( !NT_SUCCESS(Status) )
-    {
-       UnlockObject(AddrFile, OldIrql);
        return Status;
-    }
 
     TI_DbgPrint(MID_TRACE,("About to send datagram\n"));
 
     if (!NT_SUCCESS(Status = IPSendDatagram( &Packet, NCE, 
RawIpSendPacketComplete, NULL )))
     {
-       UnlockObject(AddrFile, OldIrql);
         FreeNdisPacket(Packet.NdisPacket);
         return Status;
     }
 
     TI_DbgPrint(MID_TRACE,("Leaving\n"));
-
-    UnlockObject(AddrFile, OldIrql);
 
     return STATUS_SUCCESS;
 }

Modified: branches/aicom-network-branch/lib/drivers/ip/transport/udp/udp.c
URL: 
http://svn.reactos.org/svn/reactos/branches/aicom-network-branch/lib/drivers/ip/transport/udp/udp.c?rev=45016&r1=45015&r2=45016&view=diff
==============================================================================
--- branches/aicom-network-branch/lib/drivers/ip/transport/udp/udp.c 
[iso-8859-1] (original)
+++ branches/aicom-network-branch/lib/drivers/ip/transport/udp/udp.c 
[iso-8859-1] Sat Jan  9 17:25:11 2010
@@ -224,20 +224,16 @@
                                                         BufferData,
                                                         DataSize );
 
+    UnlockObject(AddrFile, OldIrql);
+
     if( !NT_SUCCESS(Status) )
-    {
-               UnlockObject(AddrFile, OldIrql);
                return Status;
-    }
 
     if (!NT_SUCCESS(Status = IPSendDatagram( &Packet, NCE, 
UDPSendPacketComplete, NULL )))
     {
-       UnlockObject(AddrFile, OldIrql);
         FreeNdisPacket(Packet.NdisPacket);
         return Status;
     }
-
-    UnlockObject(AddrFile, OldIrql);
 
     return STATUS_SUCCESS;
 }


Reply via email to