[ros-diffs] [arty] 14644: Needed infrastructure for DHCP:

arty at svn.reactos.com arty at svn.reactos.com
Sun Apr 17 09:55:25 CEST 2005


Needed infrastructure for DHCP:
Corrected adapter index problem in iinfo.c.  Now the index returned is
from
 IF->Index.
ninfo: ditto.
ip.c: Expose IPAddInterfaceRoute and IPRemoveInterfaceRoute for use by
 set ip address IOCTL.
if.c: Allow deleting of TCP context.
main.c: Turn off debugging in CVS.
Modified: trunk/reactos/drivers/lib/ip/network/ip.c
Modified: trunk/reactos/drivers/lib/ip/transport/tcp/if.c
Modified: trunk/reactos/drivers/net/tcpip/include/ip.h
Modified: trunk/reactos/drivers/net/tcpip/include/tcp.h
Modified: trunk/reactos/drivers/net/tcpip/tcpip/dispatch.c
Modified: trunk/reactos/drivers/net/tcpip/tcpip/main.c
Modified: trunk/reactos/drivers/net/tcpip/tcpip/ninfo.c
  _____  

Modified: trunk/reactos/drivers/lib/ip/network/ip.c
--- trunk/reactos/drivers/lib/ip/network/ip.c	2005-04-17 04:20:16 UTC
(rev 14643)
+++ trunk/reactos/drivers/lib/ip/network/ip.c	2005-04-17 07:55:24 UTC
(rev 14644)
@@ -232,7 +232,28 @@

     exFreePool(IF);
 }
 
+VOID IPAddInterfaceRoute( PIP_INTERFACE IF ) {
+    PNEIGHBOR_CACHE_ENTRY NCE;
+    IP_ADDRESS NetworkAddress;
 
+    /* Add a permanent neighbor for this NTE */
+    NCE = NBAddNeighbor(IF, &IF->Unicast, 
+			IF->Address, IF->AddressLength, 
+			NUD_PERMANENT);
+    if (!NCE) {
+	TI_DbgPrint(MIN_TRACE, ("Could not create NCE.\n"));
+    }
+    
+    AddrWidenAddress( &NetworkAddress, &IF->Unicast, &IF->Netmask );
+
+    if (!RouterAddRoute(&NetworkAddress, &IF->Netmask, NCE, 1)) {
+	TI_DbgPrint(MIN_TRACE, ("Could not add route due to insufficient
resources.\n"));
+    }
+
+    /* Allow TCP to hang some configuration on this interface */
+    IF->TCPContext = TCPPrepareInterface( IF );
+}
+
 BOOLEAN IPRegisterInterface(
     PIP_INTERFACE IF)
 /*
@@ -246,8 +267,6 @@
     KIRQL OldIrql;
     UINT ChosenIndex = 1;
     BOOLEAN IndexHasBeenChosen;
-    IP_ADDRESS NetworkAddress;
-    PNEIGHBOR_CACHE_ENTRY NCE;
     IF_LIST_ITER(Interface);
 
     TI_DbgPrint(MID_TRACE, ("Called. IF (0x%X).\n", IF));
@@ -264,39 +283,38 @@
             }
         } EndFor(Interface);
     } while( !IndexHasBeenChosen );
-
+    
     IF->Index = ChosenIndex;
 
-    /* Add a permanent neighbor for this NTE */
-    NCE = NBAddNeighbor(IF, &IF->Unicast, 
-			IF->Address, IF->AddressLength, 
-			NUD_PERMANENT);
-    if (!NCE) {
-	TI_DbgPrint(MIN_TRACE, ("Could not create NCE.\n"));
-	TcpipReleaseSpinLock(&IF->Lock, OldIrql);
-	return FALSE;
-    }
+    IPAddInterfaceRoute( IF );
     
-    AddrWidenAddress( &NetworkAddress, &IF->Unicast, &IF->Netmask );
-
-    if (!RouterAddRoute(&NetworkAddress, &IF->Netmask, NCE, 1)) {
-	TI_DbgPrint(MIN_TRACE, ("Could not add route due to insufficient
resources.\n"));
-    }
-    
     /* Add interface to the global interface list */
     TcpipInterlockedInsertTailList(&InterfaceListHead, 
 				   &IF->ListEntry, 
 				   &InterfaceListLock);
 
-    /* Allow TCP to hang some configuration on this interface */
-    IF->TCPContext = TCPPrepareInterface( IF );
-
     TcpipReleaseSpinLock(&IF->Lock, OldIrql);
 
     return TRUE;
 }
 
+VOID IPRemoveInterfaceRoute( PIP_INTERFACE IF ) {
+    PNEIGHBOR_CACHE_ENTRY NCE;
+    IP_ADDRESS GeneralRoute;
 
+    TCPDisposeInterfaceData( IF->TCPContext );
+    IF->TCPContext = NULL;
+
+    AddrWidenAddress(&GeneralRoute,&IF->Unicast,&IF->Netmask);
+    RouterRemoveRoute(&GeneralRoute, &IF->Unicast);
+    
+    /* Remove permanent NCE, but first we have to find it */
+    NCE = NBLocateNeighbor(&IF->Unicast);
+    if (NCE)
+	NBRemoveNeighbor(NCE);
+
+}
+
 VOID IPUnregisterInterface(
     PIP_INTERFACE IF)
 /*
@@ -306,15 +324,11 @@
  */
 {
     KIRQL OldIrql3;
-    PNEIGHBOR_CACHE_ENTRY NCE;
 
     TI_DbgPrint(DEBUG_IP, ("Called. IF (0x%X).\n", IF));
 
-    /* Remove permanent NCE, but first we have to find it */
-    NCE = NBLocateNeighbor(&IF->Unicast);
-    if (NCE)
-	NBRemoveNeighbor(NCE);
-    
+    IPRemoveInterfaceRoute( IF );
+
     TcpipAcquireSpinLock(&InterfaceListLock, &OldIrql3);
     RemoveEntryList(&IF->ListEntry);
     TcpipReleaseSpinLock(&InterfaceListLock, OldIrql3);
  _____  

Modified: trunk/reactos/drivers/lib/ip/transport/tcp/if.c
--- trunk/reactos/drivers/lib/ip/transport/tcp/if.c	2005-04-17
04:20:16 UTC (rev 14643)
+++ trunk/reactos/drivers/lib/ip/transport/tcp/if.c	2005-04-17
07:55:24 UTC (rev 14644)
@@ -65,6 +65,10 @@

     return ifaddr;
 }
 
+VOID TCPDisposeInterfaceData( PVOID Ptr ) {
+    exFreePool( Ptr );
+}
+
 POSK_IFADDR TCPFindInterface( void *ClientData,
 			      OSK_UINT AddrType,
 			      OSK_UINT FindType,
  _____  

Modified: trunk/reactos/drivers/net/tcpip/include/ip.h
--- trunk/reactos/drivers/net/tcpip/include/ip.h	2005-04-17
04:20:16 UTC (rev 14643)
+++ trunk/reactos/drivers/net/tcpip/include/ip.h	2005-04-17
07:55:24 UTC (rev 14644)
@@ -207,6 +207,12 @@

 PIP_INTERFACE IPCreateInterface(
     PLLIP_BIND_INFO BindInfo);
 
+VOID IPAddInterfaceRoute(
+    PIP_INTERFACE IF);
+
+VOID IPRemoveInterfaceRoute(
+    PIP_INTERFACE IF);
+
 VOID IPDestroyInterface(
     PIP_INTERFACE IF);
 
  _____  

Modified: trunk/reactos/drivers/net/tcpip/include/tcp.h
--- trunk/reactos/drivers/net/tcpip/include/tcp.h	2005-04-17
04:20:16 UTC (rev 14643)
+++ trunk/reactos/drivers/net/tcpip/include/tcp.h	2005-04-17
07:55:24 UTC (rev 14644)
@@ -156,6 +156,8 @@

 
 PVOID TCPPrepareInterface( PIP_INTERFACE IF );
 
+VOID TCPDisposeInterfaceData( PVOID Data );
+
 NTSTATUS TCPTranslateError( int OskitError );
 
 VOID TCPTimeout();
  _____  

Modified: trunk/reactos/drivers/net/tcpip/tcpip/dispatch.c
--- trunk/reactos/drivers/net/tcpip/tcpip/dispatch.c	2005-04-17
04:20:16 UTC (rev 14643)
+++ trunk/reactos/drivers/net/tcpip/tcpip/dispatch.c	2005-04-17
07:55:24 UTC (rev 14644)
@@ -1483,10 +1483,20 @@

             break;
         }
         if( IF->Index == IpAddrChange->NteIndex ) {
+            IPRemoveInterfaceRoute( IF );
+
             IF->Unicast.Type = IP_ADDRESS_V4;
             IF->Unicast.Address.IPv4Address = IpAddrChange->Address;
             IF->Netmask.Type = IP_ADDRESS_V4;
             IF->Netmask.Address.IPv4Address = IpAddrChange->Netmask;
+
+            TI_DbgPrint(MID_TRACE,("New Unicast Address: %x\n", 
+                                   IF->Unicast.Address.IPv4Address));
+            TI_DbgPrint(MID_TRACE,("New Netmask        : %x\n", 
+                                   IF->Netmask.Address.IPv4Address));
+
+            IPAddInterfaceRoute( IF );
+    
             IpAddrChange->Address = IF->Index;
             Status = STATUS_SUCCESS;
             Irp->IoStatus.Information = IF->Index;
  _____  

Modified: trunk/reactos/drivers/net/tcpip/tcpip/main.c
--- trunk/reactos/drivers/net/tcpip/tcpip/main.c	2005-04-17
04:20:16 UTC (rev 14643)
+++ trunk/reactos/drivers/net/tcpip/tcpip/main.c	2005-04-17
07:55:24 UTC (rev 14644)
@@ -9,7 +9,7 @@

  */
 #include "precomp.h"
 
-//#define NDEBUG
+#define NDEBUG
 
 #ifndef NDEBUG
 DWORD DebugTraceLevel = DEBUG_ULTRA & ~(DEBUG_LOCK | DEBUG_PBUFFER);
  _____  

Modified: trunk/reactos/drivers/net/tcpip/tcpip/ninfo.c
--- trunk/reactos/drivers/net/tcpip/tcpip/ninfo.c	2005-04-17
04:20:16 UTC (rev 14643)
+++ trunk/reactos/drivers/net/tcpip/tcpip/ninfo.c	2005-04-17
07:55:24 UTC (rev 14644)
@@ -30,7 +30,7 @@

     TcpipAcquireSpinLock(&InterfaceListLock, &OldIrql);
     
     ForEachInterface(CurrentIF) {
-	IpCurrent->Index     = Count;
+	IpCurrent->Index     = CurrentIF->Index;
 	IpCurrent->Addr      = 0;
 	IpCurrent->BcastAddr = 0;
 	IpCurrent->Mask      = 0;



More information about the Ros-diffs mailing list