- Merge aicom-network-fixes up to r36337

svn path=/trunk/; revision=36338
This commit is contained in:
Cameron Gutman 2008-09-20 00:39:55 +00:00
parent 324b9250cc
commit 42c8a616ec
9 changed files with 35 additions and 31 deletions

View file

@ -68,17 +68,6 @@ NdisWriteConfiguration(
PVOID Data; PVOID Data;
WCHAR Buff[25]; WCHAR Buff[25];
if(ParameterType != NdisParameterInteger &&
ParameterType != NdisParameterHexInteger &&
ParameterType != NdisParameterString &&
ParameterType != NdisParameterMultiString &&
ParameterType != NdisParameterBinary
)
{
*Status = NDIS_STATUS_NOT_SUPPORTED;
return;
}
/* reset parameter type to standard reg types */ /* reset parameter type to standard reg types */
switch(ParameterType) switch(ParameterType)
{ {
@ -118,7 +107,7 @@ NdisWriteConfiguration(
break; break;
default: default:
*Status = NDIS_STATUS_FAILURE; *Status = NDIS_STATUS_NOT_SUPPORTED;
return; return;
} }
@ -342,6 +331,7 @@ NdisReadConfiguration(
) )
{ {
NDIS_DbgPrint(MID_TRACE,("unsupported parameter type\n")); NDIS_DbgPrint(MID_TRACE,("unsupported parameter type\n"));
*Status = NDIS_STATUS_NOT_SUPPORTED;
return; return;
} }

View file

@ -87,6 +87,7 @@ NdisAcquireReadWriteLock(
} }
} }
} }
Lock->Context = PsGetCurrentThread();
LockState->LockState = 3; LockState->LockState = 3;
} }
} }

View file

@ -818,7 +818,10 @@ VOID NTAPI MiniportWorker(IN PVOID WorkItem)
KeLowerIrql(RaiseOldIrql); KeLowerIrql(RaiseOldIrql);
} }
} }
if( NdisStatus != NDIS_STATUS_PENDING ) {
if( NdisStatus == NDIS_STATUS_RESOURCES )
MiniQueueWorkItem(Adapter, WorkItemType, WorkItemContext);
else if( NdisStatus != NDIS_STATUS_PENDING ) {
NdisMSendComplete NdisMSendComplete
( Adapter, (PNDIS_PACKET)WorkItemContext, NdisStatus ); ( Adapter, (PNDIS_PACKET)WorkItemContext, NdisStatus );
Adapter->MiniportBusy = FALSE; Adapter->MiniportBusy = FALSE;
@ -1143,7 +1146,6 @@ NdisMRegisterAdapterShutdownHandler(
* ShutdownHandler: Function to call to handle the bugcheck * ShutdownHandler: Function to call to handle the bugcheck
* NOTES: * NOTES:
* - I'm not sure about ShutdownContext * - I'm not sure about ShutdownContext
* - FIXME - memory leak below
*/ */
{ {
PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportHandle; PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportHandle;
@ -1164,9 +1166,10 @@ NdisMRegisterAdapterShutdownHandler(
BugcheckContext->ShutdownHandler = ShutdownHandler; BugcheckContext->ShutdownHandler = ShutdownHandler;
BugcheckContext->DriverContext = ShutdownContext; BugcheckContext->DriverContext = ShutdownContext;
/* not sure if this needs to be initialized or not... oh well, it's a leak. */
BugcheckContext->CallbackRecord = ExAllocatePool(NonPagedPool, sizeof(KBUGCHECK_CALLBACK_RECORD)); BugcheckContext->CallbackRecord = ExAllocatePool(NonPagedPool, sizeof(KBUGCHECK_CALLBACK_RECORD));
KeInitializeCallbackRecord(BugcheckContext->CallbackRecord);
KeRegisterBugCheckCallback(BugcheckContext->CallbackRecord, NdisIBugcheckCallback, KeRegisterBugCheckCallback(BugcheckContext->CallbackRecord, NdisIBugcheckCallback,
BugcheckContext, sizeof(BugcheckContext), (PUCHAR)"Ndis Miniport"); BugcheckContext, sizeof(BugcheckContext), (PUCHAR)"Ndis Miniport");
} }

View file

@ -1207,11 +1207,6 @@ NDIS_STATUS LANRegisterAdapter(
/* Convert returned link speed to bps (it is in 100bps increments) */ /* Convert returned link speed to bps (it is in 100bps increments) */
IF->Speed = Speed * 100L; IF->Speed = Speed * 100L;
/* Add adapter to the adapter list */
ExInterlockedInsertTailList(&AdapterListHead,
&IF->ListEntry,
&AdapterListLock);
/* Bind adapter to IP layer */ /* Bind adapter to IP layer */
if( !BindAdapter(IF, RegistryPath) ) { if( !BindAdapter(IF, RegistryPath) ) {
TI_DbgPrint(DEBUG_DATALINK,("denying adapter %wZ (BindAdapter)\n", AdapterName)); TI_DbgPrint(DEBUG_DATALINK,("denying adapter %wZ (BindAdapter)\n", AdapterName));
@ -1219,6 +1214,11 @@ NDIS_STATUS LANRegisterAdapter(
return NDIS_STATUS_NOT_ACCEPTED; return NDIS_STATUS_NOT_ACCEPTED;
} }
/* Add adapter to the adapter list */
ExInterlockedInsertTailList(&AdapterListHead,
&IF->ListEntry,
&AdapterListLock);
TI_DbgPrint(DEBUG_DATALINK, ("Leaving.\n")); TI_DbgPrint(DEBUG_DATALINK, ("Leaving.\n"));
return NDIS_STATUS_SUCCESS; return NDIS_STATUS_SUCCESS;

View file

@ -409,6 +409,11 @@ NTSTATUS FileOpenConnection(
Status = TCPSocket( Connection, AF_INET, SOCK_STREAM, IPPROTO_TCP ); Status = TCPSocket( Connection, AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( !NT_SUCCESS(Status) ) {
TCPFreeConnectionEndpoint( Connection );
return Status;
}
/* Return connection endpoint file object */ /* Return connection endpoint file object */
Request->Handle.ConnectionContext = Connection; Request->Handle.ConnectionContext = Connection;

View file

@ -26,6 +26,8 @@ PVOID PoolAllocateBuffer(
Buffer = ExAllocatePool(NonPagedPool, Size); Buffer = ExAllocatePool(NonPagedPool, Size);
RtlZeroMemory(Buffer, Size);
TI_DbgPrint(DEBUG_MEMORY, ("Allocated (%i) bytes at (0x%X).\n", Size, Buffer)); TI_DbgPrint(DEBUG_MEMORY, ("Allocated (%i) bytes at (0x%X).\n", Size, Buffer));
return Buffer; return Buffer;

View file

@ -34,10 +34,7 @@ VOID IPSendComplete
("Called. Context (0x%X) NdisPacket (0x%X) NdisStatus (0x%X)\n", ("Called. Context (0x%X) NdisPacket (0x%X) NdisStatus (0x%X)\n",
Context, NdisPacket, NdisStatus)); Context, NdisPacket, NdisStatus));
/* FIXME: Stop sending fragments and cleanup datagram buffers if if (NT_SUCCESS(NdisStatus) && PrepareNextFragment(IFC)) {
there was an error */
if (PrepareNextFragment(IFC)) {
/* A fragment was prepared for transmission, so send it */ /* A fragment was prepared for transmission, so send it */
IPSendFragment(IFC->NdisPacket, IFC->NCE, IFC); IPSendFragment(IFC->NdisPacket, IFC->NCE, IFC);
} else { } else {

View file

@ -117,6 +117,7 @@ VOID TCPAbortListenForSocket( PCONNECTION_ENDPOINT Listener,
if( Bucket->AssociatedEndpoint == Connection ) { if( Bucket->AssociatedEndpoint == Connection ) {
RemoveEntryList( ListEntry->Blink ); RemoveEntryList( ListEntry->Blink );
ExFreePool( Bucket ); ExFreePool( Bucket );
break;
} }
} }
@ -141,10 +142,14 @@ NTSTATUS TCPAccept
if( Status == STATUS_PENDING ) { if( Status == STATUS_PENDING ) {
Bucket = ExAllocatePool( NonPagedPool, sizeof(*Bucket) ); Bucket = ExAllocatePool( NonPagedPool, sizeof(*Bucket) );
Bucket->AssociatedEndpoint = Connection;
Bucket->Request.RequestNotifyObject = Complete; if( Bucket ) {
Bucket->Request.RequestContext = Context; Bucket->AssociatedEndpoint = Connection;
InsertHeadList( &Listener->ListenRequest, &Bucket->Entry ); Bucket->Request.RequestNotifyObject = Complete;
Bucket->Request.RequestContext = Context;
InsertHeadList( &Listener->ListenRequest, &Bucket->Entry );
} else
Status = STATUS_NO_MEMORY;
} }
TcpipRecursiveMutexLeave( &TCPLock ); TcpipRecursiveMutexLeave( &TCPLock );

View file

@ -104,8 +104,7 @@ int TCPPacketSend(void *ClientData, OSK_PCHAR data, OSK_UINT len ) {
IPSendDatagram( &Packet, NCE, TCPPacketSendComplete, NULL ); IPSendDatagram( &Packet, NCE, TCPPacketSendComplete, NULL );
if( !NT_SUCCESS(NdisStatus) ) return OSK_EINVAL; return 0;
else return 0;
} }
int TCPSleep( void *ClientData, void *token, int priority, char *msg, int TCPSleep( void *ClientData, void *token, int priority, char *msg,
@ -144,7 +143,9 @@ int TCPSleep( void *ClientData, void *token, int priority, char *msg,
TcpipRecursiveMutexEnter( &TCPLock, TRUE ); TcpipRecursiveMutexEnter( &TCPLock, TRUE );
PoolFreeBuffer( SleepingThread ); PoolFreeBuffer( SleepingThread );
} } else
return OSK_ENOBUFS;
TI_DbgPrint(DEBUG_TCP,("Waiting finished: %x\n", token)); TI_DbgPrint(DEBUG_TCP,("Waiting finished: %x\n", token));
return 0; return 0;
} }