mirror of
https://github.com/reactos/reactos.git
synced 2025-06-05 17:30:32 +00:00
- Set up the TCP interface data as needed in TCPFindInterface
svn path=/trunk/; revision=40933
This commit is contained in:
parent
6c1741b0aa
commit
691ef7c32a
3 changed files with 22 additions and 31 deletions
|
@ -158,10 +158,6 @@ NTSTATUS TCPSendData(
|
||||||
|
|
||||||
NTSTATUS TCPClose( PCONNECTION_ENDPOINT Connection );
|
NTSTATUS TCPClose( PCONNECTION_ENDPOINT Connection );
|
||||||
|
|
||||||
PVOID TCPPrepareInterface( PIP_INTERFACE IF );
|
|
||||||
|
|
||||||
VOID TCPDisposeInterfaceData( PVOID Data );
|
|
||||||
|
|
||||||
NTSTATUS TCPTranslateError( int OskitError );
|
NTSTATUS TCPTranslateError( int OskitError );
|
||||||
|
|
||||||
VOID TCPTimeout();
|
VOID TCPTimeout();
|
||||||
|
|
|
@ -219,6 +219,13 @@ PIP_INTERFACE IPCreateInterface(
|
||||||
|
|
||||||
TcpipInitializeSpinLock(&IF->Lock);
|
TcpipInitializeSpinLock(&IF->Lock);
|
||||||
|
|
||||||
|
IF->TCPContext = exAllocatePool
|
||||||
|
( NonPagedPool, sizeof(OSK_IFADDR) + 2 * sizeof( struct sockaddr_in ) );
|
||||||
|
if (!IF->TCPContext) {
|
||||||
|
exFreePool(IF);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __NTDRIVER__
|
#ifdef __NTDRIVER__
|
||||||
InsertTDIInterfaceEntity( IF );
|
InsertTDIInterfaceEntity( IF );
|
||||||
#endif
|
#endif
|
||||||
|
@ -241,6 +248,7 @@ VOID IPDestroyInterface(
|
||||||
RemoveTDIInterfaceEntity( IF );
|
RemoveTDIInterfaceEntity( IF );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
exFreePool(IF->TCPContext);
|
||||||
exFreePool(IF);
|
exFreePool(IF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,9 +271,6 @@ VOID IPAddInterfaceRoute( PIP_INTERFACE IF ) {
|
||||||
TI_DbgPrint(MIN_TRACE, ("Could not add route due to insufficient resources.\n"));
|
TI_DbgPrint(MIN_TRACE, ("Could not add route due to insufficient resources.\n"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allow TCP to hang some configuration on this interface */
|
|
||||||
IF->TCPContext = TCPPrepareInterface( IF );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN IPRegisterInterface(
|
BOOLEAN IPRegisterInterface(
|
||||||
|
@ -317,11 +322,6 @@ VOID IPRemoveInterfaceRoute( PIP_INTERFACE IF ) {
|
||||||
NCE = NBLocateNeighbor(&IF->Unicast);
|
NCE = NBLocateNeighbor(&IF->Unicast);
|
||||||
if (NCE)
|
if (NCE)
|
||||||
{
|
{
|
||||||
if ( IF->TCPContext ) {
|
|
||||||
TCPDisposeInterfaceData( IF->TCPContext );
|
|
||||||
IF->TCPContext = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
TI_DbgPrint(DEBUG_IP,("Removing interface Addr %s\n", A2S(&IF->Unicast)));
|
TI_DbgPrint(DEBUG_IP,("Removing interface Addr %s\n", A2S(&IF->Unicast)));
|
||||||
TI_DbgPrint(DEBUG_IP,(" Mask %s\n", A2S(&IF->Netmask)));
|
TI_DbgPrint(DEBUG_IP,(" Mask %s\n", A2S(&IF->Netmask)));
|
||||||
|
|
||||||
|
|
|
@ -30,17 +30,20 @@ struct ifnet *ifnet;
|
||||||
* parameters.
|
* parameters.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PVOID TCPPrepareInterface( PIP_INTERFACE IF ) {
|
POSK_IFADDR TCPGetInterfaceData( PIP_INTERFACE IF ) {
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
POSK_IFADDR ifaddr = exAllocatePool
|
POSK_IFADDR ifaddr = IF->TCPContext;
|
||||||
( NonPagedPool, sizeof(*ifaddr) + 2 * sizeof( struct sockaddr_in ) );
|
ASSERT(ifaddr);
|
||||||
if( !ifaddr ) return NULL;
|
|
||||||
|
RtlZeroMemory(ifaddr, sizeof(OSK_IFADDR) + 2 * sizeof( struct sockaddr_in ));
|
||||||
|
|
||||||
struct sockaddr_in *addr_in = (struct sockaddr_in *)&ifaddr[1];
|
struct sockaddr_in *addr_in = (struct sockaddr_in *)&ifaddr[1];
|
||||||
struct sockaddr_in *dstaddr_in = (struct sockaddr_in *)&addr_in[1];
|
struct sockaddr_in *dstaddr_in = (struct sockaddr_in *)&addr_in[1];
|
||||||
|
|
||||||
TI_DbgPrint(DEBUG_TCPIF,("Called\n"));
|
TI_DbgPrint(DEBUG_TCPIF,("Called\n"));
|
||||||
|
|
||||||
ifaddr->ifa_dstaddr = (struct sockaddr *)dstaddr_in;
|
ifaddr->ifa_dstaddr = (struct sockaddr *)dstaddr_in;
|
||||||
|
|
||||||
/* XXX - Point-to-point interfaces not supported yet */
|
/* XXX - Point-to-point interfaces not supported yet */
|
||||||
memset( &ifaddr->ifa_dstaddr, 0, sizeof( struct sockaddr ) );
|
memset( &ifaddr->ifa_dstaddr, 0, sizeof( struct sockaddr ) );
|
||||||
|
|
||||||
|
@ -49,10 +52,9 @@ PVOID TCPPrepareInterface( PIP_INTERFACE IF ) {
|
||||||
ADE_UNICAST,
|
ADE_UNICAST,
|
||||||
(PULONG)&addr_in->sin_addr.s_addr );
|
(PULONG)&addr_in->sin_addr.s_addr );
|
||||||
|
|
||||||
if( !NT_SUCCESS(Status) )
|
ASSERT(NT_SUCCESS(Status));
|
||||||
addr_in->sin_addr.s_addr = 0;
|
|
||||||
|
|
||||||
TI_DbgPrint(DEBUG_TCPIF,("Prepare interface %x : addr %x\n",
|
TI_DbgPrint(DEBUG_TCPIF,("interface %x : addr %x\n",
|
||||||
IF, addr_in->sin_addr.s_addr));
|
IF, addr_in->sin_addr.s_addr));
|
||||||
|
|
||||||
ifaddr->ifa_flags = 0; /* XXX what goes here? */
|
ifaddr->ifa_flags = 0; /* XXX what goes here? */
|
||||||
|
@ -65,10 +67,6 @@ PVOID TCPPrepareInterface( PIP_INTERFACE IF ) {
|
||||||
return ifaddr;
|
return ifaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID TCPDisposeInterfaceData( PVOID Ptr ) {
|
|
||||||
exFreePool( Ptr );
|
|
||||||
}
|
|
||||||
|
|
||||||
POSK_IFADDR TCPFindInterface( void *ClientData,
|
POSK_IFADDR TCPFindInterface( void *ClientData,
|
||||||
OSK_UINT AddrType,
|
OSK_UINT AddrType,
|
||||||
OSK_UINT FindType,
|
OSK_UINT FindType,
|
||||||
|
@ -77,6 +75,7 @@ POSK_IFADDR TCPFindInterface( void *ClientData,
|
||||||
PIP_INTERFACE IF;
|
PIP_INTERFACE IF;
|
||||||
IP_ADDRESS Destination;
|
IP_ADDRESS Destination;
|
||||||
struct sockaddr_in *addr_in = (struct sockaddr_in *)ReqAddr;
|
struct sockaddr_in *addr_in = (struct sockaddr_in *)ReqAddr;
|
||||||
|
POSK_IFADDR InterfaceData;
|
||||||
|
|
||||||
TI_DbgPrint(DEBUG_TCPIF,("called for type %d\n", FindType));
|
TI_DbgPrint(DEBUG_TCPIF,("called for type %d\n", FindType));
|
||||||
|
|
||||||
|
@ -91,19 +90,15 @@ POSK_IFADDR TCPFindInterface( void *ClientData,
|
||||||
TI_DbgPrint(DEBUG_TCPIF,("Address is %x\n", addr_in->sin_addr.s_addr));
|
TI_DbgPrint(DEBUG_TCPIF,("Address is %x\n", addr_in->sin_addr.s_addr));
|
||||||
|
|
||||||
IF = FindOnLinkInterface(&Destination);
|
IF = FindOnLinkInterface(&Destination);
|
||||||
|
if (!IF) return NULL;
|
||||||
|
|
||||||
if (!IF || !IF->TCPContext) {
|
InterfaceData = TCPGetInterfaceData(IF);
|
||||||
/* TCPContext can be NULL if we don't have an IP address yet */
|
|
||||||
TI_DbgPrint(DEBUG_TCPIF, ("No interface or TCP context (%x) (%x)\n",
|
|
||||||
IF, IF ? IF->TCPContext : 0));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
addr_in = (struct sockaddr_in *)
|
addr_in = (struct sockaddr_in *)
|
||||||
((POSK_IFADDR)IF->TCPContext)->ifa_addr;
|
InterfaceData->ifa_addr;
|
||||||
|
|
||||||
TI_DbgPrint(DEBUG_TCPIF,("returning addr %x\n", addr_in->sin_addr.s_addr));
|
TI_DbgPrint(DEBUG_TCPIF,("returning addr %x\n", addr_in->sin_addr.s_addr));
|
||||||
|
|
||||||
return IF->TCPContext;
|
return InterfaceData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue