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;