Cleaing in receive: fixed one bugcheck.
authorArt Yerkes <art.yerkes@gmail.com>
Tue, 9 Nov 2004 09:39:38 +0000 (09:39 +0000)
committerArt Yerkes <art.yerkes@gmail.com>
Tue, 9 Nov 2004 09:39:38 +0000 (09:39 +0000)
Removed much small allocation cruft (20 byte or less objects)

svn path=/trunk/; revision=11602

23 files changed:
reactos/drivers/lib/ip/network/address.c
reactos/drivers/lib/ip/network/arp.c
reactos/drivers/lib/ip/network/interface.c
reactos/drivers/lib/ip/network/ip.c
reactos/drivers/lib/ip/network/prefix.c
reactos/drivers/lib/ip/network/receive.c
reactos/drivers/lib/ip/network/router.c
reactos/drivers/lib/ip/transport/rawip/rawip.c
reactos/drivers/lib/ip/transport/tcp/event.c
reactos/drivers/lib/ip/transport/tcp/tcp.c
reactos/drivers/lib/ip/transport/udp/udp.c
reactos/drivers/net/tcpip/datalink/lan.c
reactos/drivers/net/tcpip/include/address.h
reactos/drivers/net/tcpip/include/ip.h
reactos/drivers/net/tcpip/include/prefix.h
reactos/drivers/net/tcpip/include/receive.h
reactos/drivers/net/tcpip/include/router.h
reactos/drivers/net/tcpip/include/titypes.h
reactos/drivers/net/tcpip/tcpip/dispatch.c
reactos/drivers/net/tcpip/tcpip/fileobjs.c
reactos/drivers/net/tcpip/tcpip/main.c
reactos/drivers/net/tcpip/tcpip/ninfo.c
reactos/drivers/net/tcpip/tests/stubs.tst

index f6cb5d0..1eef66b 100644 (file)
@@ -309,7 +309,6 @@ PIP_ADDRESS AddrBuildIPv4(
     if (IPAddress != NULL) {
         IPAddress->Type                = IP_ADDRESS_V4;
         IPAddress->Address.IPv4Address = Address;
-        IPAddress->Free                = IPAddressFree;
     }
 
     return IPAddress;
index 851b9ec..e4c8ee8 100644 (file)
@@ -244,7 +244,7 @@ VOID ARPReceive(
         (UCHAR)Interface->AddressLength, /* Hardware address length */
         (UCHAR)Header->ProtoAddrLen,     /* Protocol address length */
         Interface->Address,              /* Sender's (local) hardware address */
-        &ADE->Address->Address,          /* Sender's (local) protocol address */
+        &ADE->Address.Address,           /* Sender's (local) protocol address */
         SenderHWAddress,                 /* Target's (remote) hardware address */
         SenderProtoAddress,              /* Target's (remote) protocol address */
         ARP_OPCODE_REPLY);               /* ARP reply */
index be94013..2c33886 100644 (file)
@@ -19,7 +19,7 @@ NTSTATUS GetInterfaceIPv4Address( PIP_INTERFACE Interface,
 
     ForEachADE(Interface->ADEListHead,CurrentADE) {
        if (CurrentADE->Type == TargetType) {
-           *Address = CurrentADE->Address->Address.IPv4Address;
+           *Address = CurrentADE->Address.Address.IPv4Address;
            return STATUS_SUCCESS;
        }
     } EndFor(CurrentADE);
index 9e41eea..c9710e7 100644 (file)
@@ -124,7 +124,7 @@ PADDRESS_ENTRY CreateADE(
     ADE->Free     = FreeADE;
     ADE->NTE      = NTE;
     ADE->Type     = Type;
-    ADE->Address  = Address;
+    RtlCopyMemory(&ADE->Address,Address,sizeof(ADE->Address));
 
     /* Add ADE to the list on the interface */
     InsertTailList(&IF->ADEListHead, &ADE->ListEntry);
@@ -408,7 +408,7 @@ PNET_TABLE_ENTRY IPLocateNTEOnInterface(
 
     while (CurrentEntry != &IF->ADEListHead) {
              Current = CONTAINING_RECORD(CurrentEntry, ADDRESS_ENTRY, ListEntry);
-        if (AddrIsEqual(Address, Current->Address)) {
+        if (AddrIsEqual(Address, &Current->Address)) {
             *AddressType = Current->Type;
             TcpipReleaseSpinLock(&IF->Lock, OldIrql);
             return Current->NTE;
@@ -497,7 +497,7 @@ PADDRESS_ENTRY IPLocateADE(
     ForEachInterface(CurrentIF) {
         /* Search the address entry list and return the ADE if found */
        ForEachADE(CurrentIF->ADEListHead,CurrentADE) {
-            if ((AddrIsEqual(Address, CurrentADE->Address)) && 
+            if ((AddrIsEqual(Address, &CurrentADE->Address)) && 
                 (CurrentADE->Type == AddressType)) {
                 TcpipReleaseSpinLock(&InterfaceListLock, OldIrql);
                 return CurrentADE;
@@ -729,7 +729,7 @@ BOOLEAN IPRegisterInterface(
         }
 
         /* NCE is already referenced */
-        if (!RouterAddRoute(Current->Address, Current->PLE->Prefix, NCE, 1)) {
+        if (!RouterAddRoute(Current->Address, &Current->PLE->Prefix, NCE, 1)) {
             TI_DbgPrint(MIN_TRACE, ("Could not add route due to insufficient resources.\n"));
         }
 
index 2fbff24..410f2c2 100644 (file)
@@ -54,7 +54,7 @@ PPREFIX_LIST_ENTRY CreatePLE(PIP_INTERFACE IF, PIP_ADDRESS Prefix, UINT Length)
 
     INIT_TAG(PLE, TAG('P','L','E',' '));
     PLE->Interface    = IF;
-    PLE->Prefix       = Prefix;
+    RtlCopyMemory(&PLE->Prefix, Prefix, sizeof(PLE->Prefix));
     PLE->PrefixLength = Length;
 
     /* Add PLE to the global prefix list */
index c5eb24f..9074879 100644 (file)
@@ -107,12 +107,6 @@ VOID FreeIPDR(
     CurrentEntry = NextEntry;
   }
 
-  /* Free resources for the header, if it exists */
-  if (IPDR->IPv4Header) {
-    TI_DbgPrint(DEBUG_IP, ("Freeing IPv4 header data at (0x%X).\n", IPDR->IPv4Header));
-    exFreePool(IPDR->IPv4Header);
-  }
-
   TI_DbgPrint(DEBUG_IP, ("Freeing IPDR data at (0x%X).\n", IPDR));
 
   TcpipFreeToNPagedLookasideList(&IPDRList, IPDR);
@@ -229,7 +223,7 @@ PIP_PACKET ReassembleDatagram(
   }
 
   /* Copy the header into the buffer */
-  RtlCopyMemory(IPPacket->Header, IPDR->IPv4Header, IPDR->HeaderSize);  
+  RtlCopyMemory(IPPacket->Header, &IPDR->IPv4Header, IPDR->HeaderSize);  
   
   Data = IPPacket->Header + IPDR->HeaderSize;
   IPPacket->Data = Data;
@@ -337,7 +331,6 @@ VOID ProcessFragment(
     AddrInitIPv4(&IPDR->DstAddr, IPv4Header->DstAddr);
     IPDR->Id         = IPv4Header->Id;
     IPDR->Protocol   = IPv4Header->Protocol;
-    IPDR->IPv4Header = NULL;
     InitializeListHead(&IPDR->FragmentListHead);
     InitializeListHead(&IPDR->HoleListHead);
     InsertTailList(&IPDR->HoleListHead, &Hole->ListEntry);
@@ -403,17 +396,10 @@ VOID ProcessFragment(
 
     /* If this is the first fragment, save the IP header */
     if (FragFirst == 0) {
-       IPDR->IPv4Header = exAllocatePool(NonPagedPool, IPPacket->HeaderSize);
-      if (!IPDR->IPv4Header) {
-        /* We don't have the resources to process this packet, discard it */
-        Cleanup(&IPDR->Lock, OldIrql, IPDR, NULL);
-        return;
-      }
-
       TI_DbgPrint(DEBUG_IP, ("First fragment found. Header buffer is at (0x%X). "
         "Header size is (%d).\n", IPDR->IPv4Header, IPPacket->HeaderSize));
 
-      RtlCopyMemory(IPDR->IPv4Header, IPPacket->Header, IPPacket->HeaderSize);
+      RtlCopyMemory(&IPDR->IPv4Header, IPPacket->Header, IPPacket->HeaderSize);
       IPDR->HeaderSize = IPPacket->HeaderSize;
     }
 
@@ -467,9 +453,9 @@ VOID ProcessFragment(
 
     Datagram = ReassembleDatagram(IPDR);
 
+    RemoveIPDR(IPDR);
     TcpipReleaseSpinLock(&IPDR->Lock, OldIrql);
 
-    RemoveIPDR(IPDR);
     FreeIPDR(IPDR);
 
     if (!Datagram)
index b451bc8..67ca4aa 100644 (file)
@@ -272,7 +272,7 @@ PIP_INTERFACE RouterFindOnLinkInterface(
     while (CurrentEntry != &PrefixListHead) {
            Current = CONTAINING_RECORD(CurrentEntry, PREFIX_LIST_ENTRY, ListEntry);
 
-        if (HasPrefix(Address, Current->Prefix, Current->PrefixLength) &&
+        if (HasPrefix(Address, &Current->Prefix, Current->PrefixLength) &&
             ((!NTE) || (NTE->Interface == Current->Interface)))
             return Current->Interface;
 
@@ -321,9 +321,10 @@ PFIB_ENTRY RouterAddRoute(
 
    INIT_TAG(Router, TAG('R','O','U','T'));
 
-    FIBE->Free           = FreeFIB;
-    FIBE->NetworkAddress = NetworkAddress;
-    FIBE->Netmask        = Netmask;
+    RtlCopyMemory( &FIBE->NetworkAddress, NetworkAddress, 
+                  sizeof(FIBE->NetworkAddress) );
+    RtlCopyMemory( &FIBE->Netmask, Netmask, 
+                  sizeof(FIBE->Netmask) );
     FIBE->Router         = Router;
     FIBE->Metric         = Metric;
 
@@ -415,8 +416,8 @@ VOID RouterRemoveRoute(
     KIRQL OldIrql;
 
     TI_DbgPrint(DEBUG_ROUTER, ("Called. FIBE (0x%X).\n", FIBE));
-
-    TI_DbgPrint(DEBUG_ROUTER, ("FIBE (%s).\n", A2S(FIBE->NetworkAddress)));
+    
+    TI_DbgPrint(DEBUG_ROUTER, ("FIBE (%s).\n", A2S(&FIBE->NetworkAddress)));
 
     TcpipAcquireSpinLock(&FIBLock, &OldIrql);
     DestroyFIBE(FIBE);
@@ -483,10 +484,6 @@ PFIB_ENTRY RouterCreateRouteIPv4(
     if (!FIBE) {
         /* Not enough free resources */
         NBRemoveNeighbor(NCE);
-
-        (pNetworkAddress->Free)(pNetworkAddress);
-        (pNetmask->Free)(pNetmask);
-        (pRouterAddress->Free)(pRouterAddress);
     }
 
     return FIBE;
index 9f778de..f7e1d0c 100644 (file)
@@ -112,7 +112,7 @@ NTSTATUS RawIPSendDatagram(
     if( Status == NDIS_STATUS_SUCCESS )
        Status = BuildRawIPPacket( &Packet,
                                   BufferLen,
-                                  AddrFile->ADE->Address,
+                                  &AddrFile->ADE->Address,
                                   AddrFile->Port );
 
     if( Status == NDIS_STATUS_SUCCESS ) {
index c43987e..20b1742 100644 (file)
@@ -13,6 +13,7 @@
 extern ULONG TCP_IPIdentification;
 extern LIST_ENTRY SleepingThreadsList;
 extern FAST_MUTEX SleepingThreadsLock;
+extern RECURSIVE_MUTEX TCPLock;
 
 int TCPSocketState(void *ClientData,
                   void *WhichSocket, 
@@ -31,6 +32,8 @@ int TCPSocketState(void *ClientData,
        return 0;
     }
 
+    TcpipRecursiveMutexEnter( &TCPLock, TRUE );
+
     if( (NewState & SEL_CONNECT) && 
        !(Connection->State & SEL_CONNECT) ) {
        while( !IsListEmpty( &Connection->ConnectRequest ) ) {
@@ -75,7 +78,7 @@ int TCPSocketState(void *ClientData,
            TI_DbgPrint(MID_TRACE,
                        ("Reading %d bytes to %x\n", RecvLen, RecvBuffer));
 
-           if( NewState & SEL_FIN && !RecvLen ) {
+           if( (NewState & SEL_FIN) && !RecvLen ) {
                Status = STATUS_END_OF_FILE;
                Received = 0;
            } else {
@@ -120,6 +123,8 @@ int TCPSocketState(void *ClientData,
        }
     } 
 
+    TcpipRecursiveMutexLeave( &TCPLock );
+
     return 0;
 }
 
index bf7abae..fd58d73 100644 (file)
@@ -373,6 +373,7 @@ NTSTATUS TCPReceiveData
        Bucket = ExAllocatePool( NonPagedPool, sizeof(*Bucket) );
        if( !Bucket ) {
            TI_DbgPrint(MID_TRACE,("Failed to allocate bucket\n"));
+           TcpipRecursiveMutexLeave( &TCPLock );
            return STATUS_NO_MEMORY;
        }
        
index 31a3a34..e06d74d 100644 (file)
@@ -217,7 +217,7 @@ NTSTATUS UDPSendDatagram(
     Status = BuildUDPPacket( &Packet,
                             &RemoteAddress,
                             RemotePort,
-                            AddrFile->ADE->Address,
+                            &AddrFile->ADE->Address,
                             AddrFile->Port,
                             BufferData,
                             DataSize );
index 5ca353d..a059d82 100644 (file)
@@ -200,7 +200,7 @@ VOID STDCALL LanReceiveWorker( PVOID Context ) {
 
     while( (ListEntry = 
            ExInterlockedRemoveHeadList( &LanWorkList, &LanWorkLock )) ) {
-       WorkItem = CONTAINING_RECORD(ListEntry,  LAN_WQ_ITEM, ListEntry);
+       WorkItem = CONTAINING_RECORD(ListEntry, LAN_WQ_ITEM, ListEntry);
        
        Packet = WorkItem->Packet;
        Adapter = WorkItem->Adapter;
@@ -732,8 +732,6 @@ VOID BindAdapter(
        /* XXX how do we proceed?  No ip address, no parameters... do we guess? */
        if(RegHandle)  
            ZwClose(RegHandle);
-       if(Address) Address->Free(Address);
-       if(Netmask) Netmask->Free(Netmask);
        IPDestroyInterface(IF);
        return;
     }
@@ -750,14 +748,11 @@ VOID BindAdapter(
 
     /* Create a net table entry for this interface */
     if (!IPCreateNTE(IF, Address, AddrCountPrefixBits(Netmask))) {
-       Netmask->Free(Netmask);
         TI_DbgPrint(MIN_TRACE, ("IPCreateNTE() failed.\n"));
         IPDestroyInterface(IF);
         return;
     }
 
-    Netmask->Free(Netmask);
-
     /* Register interface with IP layer */
     IPRegisterInterface(IF);
 
index 1304417..1c92bab 100644 (file)
@@ -18,7 +18,6 @@
     INIT_TAG((IPAddress), TAG('I','P','V','4'));      \
     (IPAddress)->Type                = IP_ADDRESS_V4; \
     (IPAddress)->Address.IPv4Address = (RawAddress);  \
-    (IPAddress)->Free =                IPAddressFree; \
 }
 
 #ifdef DBG
index f224d09..5c26534 100644 (file)
@@ -22,17 +22,16 @@ typedef IPv6_RAW_ADDRESS *PIPv6_RAW_ADDRESS;
 /* IP style address */
 typedef struct IP_ADDRESS {
     DEFINE_TAG
-    UCHAR Type;                         /* Type of IP address */
+    UCHAR Type;                      /* Type of IP address */
     union {
-        IPv4_RAW_ADDRESS IPv4Address;   /* IPv4 address (in network byte order) */
-        PIPv6_RAW_ADDRESS IPv6Address;  /* IPv6 address (in network byte order) */
+        IPv4_RAW_ADDRESS IPv4Address;/* IPv4 address (in network byte order) */
+        IPv6_RAW_ADDRESS IPv6Address;/* IPv6 address (in network byte order) */
     } Address;
-    OBJECT_FREE_ROUTINE Free;           /* The free routine */
 } IP_ADDRESS, *PIP_ADDRESS;
 
 /* IP type constants */
-#define IP_ADDRESS_V4   0x00 /* IPv4 style address */
-#define IP_ADDRESS_V6   0x01 /* IPv6 style address */
+#define IP_ADDRESS_V4   0x04 /* IPv4 style address */
+#define IP_ADDRESS_V6   0x06 /* IPv6 style address */
 
 
 /* IPv4 header format */
@@ -49,6 +48,21 @@ typedef struct IPv4_HEADER {
     IPv4_RAW_ADDRESS DstAddr;    /* Destination Address */
 } IPv4_HEADER, *PIPv4_HEADER;
 
+/* IPv6 header format */
+typedef struct IPv6_HEADER {
+    ULONG VTF;                   /* Version, Traffic Class, Flow Label */
+    USHORT PayloadLength;
+    UCHAR NextHeader;            /* Same as Protocol in IPv4 */
+    UCHAR HopLimit;              /* Same as Ttl in IPv4 */
+    IPv6_RAW_ADDRESS SrcAddr;
+    IPv6_RAW_ADDRESS DstAddr;
+} IPv6_HEADER, *PIPv6_HEADER;
+
+typedef union _IP_HEADER {
+    IPv4_HEADER v4;
+    IPv6_HEADER v6;
+} IP_HEADER, *PIP_HEADER;
+
 #define IPv4_FRAGOFS_MASK       0x1FFF /* Fragment offset mask (host byte order) */
 #define IPv4_MF_MASK            0x2000 /* More fragments (host byte order) */
 #define IPv4_DF_MASK            0x4000 /* Don't fragment (host byte order) */
@@ -99,7 +113,7 @@ typedef struct _ADDRESS_ENTRY {
     OBJECT_FREE_ROUTINE     Free;       /* Routine used to free resources for the object */
     struct _NET_TABLE_ENTRY *NTE;       /* NTE associated with this address */
     UCHAR                   Type;       /* Address type */
-    PIP_ADDRESS             Address;    /* Pointer to address identifying this entry */
+    IP_ADDRESS              Address;    /* Pointer to address identifying this entry */
 } ADDRESS_ENTRY, *PADDRESS_ENTRY;
 
 /* Values for address type -- also the interface flags */
index 201b7ea..2dcd84f 100644 (file)
@@ -12,7 +12,7 @@ typedef struct _PREFIX_LIST_ENTRY {
     DEFINE_TAG
     LIST_ENTRY ListEntry;    /* Entry on list */
     PIP_INTERFACE Interface; /* Pointer to interface */
-    PIP_ADDRESS Prefix;      /* Pointer to prefix */
+    IP_ADDRESS Prefix;       /* Pointer to prefix */
     UINT PrefixLength;       /* Length of prefix */
 } PREFIX_LIST_ENTRY, *PPREFIX_LIST_ENTRY;
 
index bcc18ae..52e520f 100644 (file)
@@ -34,7 +34,7 @@ typedef struct IPDATAGRAM_REASSEMBLY {
     IP_ADDRESS DstAddr;          /* Destination address */
     UCHAR Protocol;              /* Internet Protocol number */
     USHORT Id;                   /* Identification number */
-    PIPv4_HEADER IPv4Header;     /* Pointer to IP header */
+    IP_HEADER IPv4Header;        /* Pointer to IP header */
     UINT HeaderSize;             /* Length of IP header */
     LIST_ENTRY FragmentListHead; /* IP fragment list */
     LIST_ENTRY HoleListHead;     /* IP datagram hole list */
index 2369c26..b6ad6df 100644 (file)
@@ -14,8 +14,8 @@
 typedef struct _FIB_ENTRY {
     LIST_ENTRY ListEntry;         /* Entry on list */
     OBJECT_FREE_ROUTINE Free;     /* Routine used to free resources for the object */
-    PIP_ADDRESS NetworkAddress;   /* Address of network */
-    PIP_ADDRESS Netmask;          /* Netmask of network */
+    IP_ADDRESS NetworkAddress;    /* Address of network */
+    IP_ADDRESS Netmask;           /* Netmask of network */
     PNEIGHBOR_CACHE_ENTRY Router; /* Pointer to NCE of router to use */
     UINT Metric;                  /* Cost of this route */
 } FIB_ENTRY, *PFIB_ENTRY;
index 6e529e9..585977f 100644 (file)
@@ -182,7 +182,7 @@ typedef struct _ADDRESS_FILE {
     struct _CONNECTION_ENDPOINT *Connection;
                                           /* Associated connection or NULL if no
                                              associated connection exist */
-    PIP_ADDRESS AddrCache;                /* One entry address cache (destination
+    IP_ADDRESS AddrCache;                 /* One entry address cache (destination
                                              address of last packet transmitted) */
 
     /* The following members are used to control event notification */
index 111731a..bf121f0 100644 (file)
@@ -467,7 +467,7 @@ NTSTATUS DispTdiDisconnect(
         Address->Address[0].AddressLength = TDI_ADDRESS_LENGTH_IP;
         Address->Address[0].AddressType = TDI_ADDRESS_TYPE_IP;
         Address->Address[0].Address[0].sin_port = AddrFile->Port;
-        Address->Address[0].Address[0].in_addr = AddrFile->ADE->Address->Address.IPv4Address;        
+        Address->Address[0].Address[0].in_addr = AddrFile->ADE->Address.Address.IPv4Address;        
         RtlZeroMemory(
           &Address->Address[0].Address[0].sin_zero,
           sizeof(Address->Address[0].Address[0].sin_zero));
@@ -594,7 +594,7 @@ NTSTATUS DispTdiQueryInformation(
         Address->Address[0].AddressLength = TDI_ADDRESS_LENGTH_IP;
         Address->Address[0].AddressType = TDI_ADDRESS_TYPE_IP;
         Address->Address[0].Address[0].sin_port = AddrFile->Port;
-        Address->Address[0].Address[0].in_addr = AddrFile->ADE->Address->Address.IPv4Address;        
+        Address->Address[0].Address[0].in_addr = AddrFile->ADE->Address.Address.IPv4Address;        
         RtlZeroMemory(
           &Address->Address[0].Address[0].sin_zero,
           sizeof(Address->Address[0].Address[0].sin_zero));
index 0733df9..c2eb9bb 100644 (file)
@@ -69,7 +69,7 @@ PADDRESS_FILE AddrSearchNext(
     while (CurrentEntry != &AddressFileListHead) {
         Current = CONTAINING_RECORD(CurrentEntry, ADDRESS_FILE, ListEntry);
 
-        IPAddress = Current->ADE->Address;
+        IPAddress = &Current->ADE->Address;
 
         TI_DbgPrint(DEBUG_ADDRFILE, ("Comparing: ((%d, %d, %s), (%d, %d, %s)).\n",
             WN2H(Current->Port),
@@ -340,7 +340,7 @@ NTSTATUS FileOpenAddress(
   }
 
   TI_DbgPrint(MID_TRACE, ("Opening address %s for communication.\n",
-    A2S(AddrFile->ADE->Address)));
+    A2S(&AddrFile->ADE->Address)));
 
   /* Protocol specific handling */
   switch (Protocol) {
index a1ead82..8e0ecd1 100644 (file)
@@ -9,7 +9,7 @@
  */
 #include "precomp.h"
 
-#define NDEBUG
+//#define NDEBUG
 
 #ifndef NDEBUG
 DWORD DebugTraceLevel = 0x7fffffff;
index 170c20f..2903509 100644 (file)
@@ -85,20 +85,19 @@ TDI_STATUS InfoTdiQueryGetRouteTable( PNDIS_BUFFER Buffer, PUINT BufferSize ) {
     
     while( RtCurrent < RouteEntries + RtCount ) {
        /* Copy Desitnation */
-       if( RCacheCur->NetworkAddress && RCacheCur->Netmask && 
-           RCacheCur->Router ) {
+       if( RCacheCur->Router ) {
            TI_DbgPrint(MAX_TRACE, ("%d: NA %08x NM %08x GW %08x MT %d\n",
                                    RtCurrent - RouteEntries,
-                                   RCacheCur->NetworkAddress->Address,
-                                   RCacheCur->Netmask->Address,
+                                   &RCacheCur->NetworkAddress.Address,
+                                   &RCacheCur->Netmask.Address,
                                    RCacheCur->Router->Address.Address,
                                    RCacheCur->Metric));
            
            RtlCopyMemory( &RtCurrent->Dest, 
-                          &RCacheCur->NetworkAddress->Address,
+                          &RCacheCur->NetworkAddress.Address,
                           sizeof(RtCurrent->Dest) );
            RtlCopyMemory( &RtCurrent->Mask,
-                          &RCacheCur->Netmask->Address,
+                          &RCacheCur->Netmask.Address,
                           sizeof(RtCurrent->Mask) );
            /* Currently, this address is stuffed into the pointer.
             * That probably is not intended. */
index 081395e..cfcb69a 100644 (file)
@@ -1,52 +1,50 @@
-# Import stubs Auto-generated by ./stubgen.sh
-ntoskrnl.a _imp_@InterlockedDecrement@4
-ntoskrnl.a _imp_@InterlockedExchange@8
-ntoskrnl.a _imp_@InterlockedIncrement@4
+# Automatically generated by stubgen
+ndis.a _imp__NDIS_BUFFER_TO_SPAN_PAGES@4
+ntoskrnl.a _imp__KeBugCheck@4
 ntoskrnl.a _imp_@InterlockedPopEntrySList@4
 ntoskrnl.a _imp_@InterlockedPushEntrySList@8
-ntoskrnl.a _imp_@IofCompleteRequest@8
-ntoskrnl.a _imp_@ObfDereferenceObject@4
-ntoskrnl.a _imp__ExAllocatePool@8
 ntoskrnl.a _imp__ExDeleteNPagedLookasideList@4
-ntoskrnl.a _imp__ExFreePool@4
 ntoskrnl.a _imp__ExInitializeNPagedLookasideList@28
-ntoskrnl.a _imp__ExInterlockedInsertTailList@12
+ndis.a _imp__NdisDeregisterProtocol@8
+ndis.a _imp__NdisRegisterProtocol@16
+ndis.a _imp__NdisCloseAdapter@8
+ndis.a _imp__NdisOpenAdapter@44
+ndis.a _imp__NdisSend@12
+ndis.a _imp__NdisTransferData@28
 ntoskrnl.a _imp__ExInterlockedRemoveHeadList@8
-ntoskrnl.a _imp__ExQueueWorkItem@8
-ntoskrnl.a _imp__IoAcquireCancelSpinLock@4
+ndis.a _imp__NdisRequest@12
+ndis.a _imp__NdisFreePacket@4
+ndis.a _imp__NdisFreeBuffer@4
+ndis.a _imp__NdisAllocatePacket@12
+ndis.a _imp__NdisAllocateBuffer@20
+ntoskrnl.a _imp__ExInterlockedInsertTailList@12
+ntoskrnl.a _imp_@IofCompleteRequest@8
+ntoskrnl.a _imp__MmProbeAndLockPages@12
 ntoskrnl.a _imp__IoAllocateMdl@20
-ntoskrnl.a _imp__IoCreateDevice@28
-ntoskrnl.a _imp__IoDeleteDevice@4
-ntoskrnl.a _imp__IoFileObjectType
+ntoskrnl.a _imp__ExFreePool@4
 ntoskrnl.a _imp__IoFreeMdl@4
-ntoskrnl.a _imp__IoReleaseCancelSpinLock@4
-ntoskrnl.a _imp__KeBugCheck@4
-ntoskrnl.a _imp__KeCancelTimer@4
-ntoskrnl.a _imp__KeInitializeDpc@12
-ntoskrnl.a _imp__KeInitializeEvent@12
-ntoskrnl.a _imp__KeInitializeSpinLock@4
-ntoskrnl.a _imp__KeInitializeTimer@4
-ntoskrnl.a _imp__KeResetEvent@4
-ntoskrnl.a _imp__KeSetEvent@12
-ntoskrnl.a _imp__KeSetTimerEx@20
-ntoskrnl.a _imp__KeWaitForSingleObject@20
-ntoskrnl.a _imp__MmMapLockedPages@8
-ntoskrnl.a _imp__MmProbeAndLockPages@12
 ntoskrnl.a _imp__MmUnlockPages@4
-ndis.a _imp__NDIS_BUFFER_TO_SPAN_PAGES@4
-ndis.a _imp__NdisAllocateBuffer@20
+ntoskrnl.a _imp__MmMapLockedPages@8
+ntoskrnl.a _imp_@ObfDereferenceObject@4
+ntoskrnl.a _imp__ObReferenceObjectByHandle@24
+ntoskrnl.a _imp__IoFileObjectType
+ntoskrnl.a _imp_@InterlockedExchange@8
+ntoskrnl.a _imp__KeSetTimerEx@20
+ntoskrnl.a _imp__KeInitializeTimer@4
+ntoskrnl.a _imp__KeInitializeDpc@12
 ndis.a _imp__NdisAllocateBufferPool@12
-ndis.a _imp__NdisAllocatePacket@12
 ndis.a _imp__NdisAllocatePacketPool@16
-ndis.a _imp__NdisCloseAdapter@8
-ndis.a _imp__NdisDeregisterProtocol@8
-ndis.a _imp__NdisFreeBuffer@4
-ndis.a _imp__NdisFreeBufferPool@4
-ndis.a _imp__NdisFreePacket@4
+ntoskrnl.a _imp__KeInitializeSpinLock@4
+ntoskrnl.a _imp__IoCreateDevice@28
+ntoskrnl.a _imp__ExQueueWorkItem@8
+ntoskrnl.a _imp__IoDeleteDevice@4
 ndis.a _imp__NdisFreePacketPool@4
-ndis.a _imp__NdisOpenAdapter@44
-ndis.a _imp__NdisRegisterProtocol@16
-ndis.a _imp__NdisRequest@12
-ndis.a _imp__NdisSend@12
-ndis.a _imp__NdisTransferData@28
-ntoskrnl.a _imp__ObReferenceObjectByHandle@24
+ndis.a _imp__NdisFreeBufferPool@4
+ntoskrnl.a _imp__KeCancelTimer@4
+ntoskrnl.a _imp__KeWaitForSingleObject@20
+ntoskrnl.a _imp__KeResetEvent@4
+ntoskrnl.a _imp__IoReleaseCancelSpinLock@4
+ntoskrnl.a _imp__KeSetEvent@12
+ntoskrnl.a _imp__IoAcquireCancelSpinLock@4
+ntoskrnl.a _imp__KeInitializeEvent@12
+ntoskrnl.a _imp__ExAllocatePool@8