From: tzachid Date: Mon, 21 Nov 2005 12:08:06 +0000 (+0000) Subject: Send parameters are now passed to the driver. (Rev 76) X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=54823aec62e78b06a8dd490463ff911619922f24;p=~shefty%2Frdma-win.git Send parameters are now passed to the driver. (Rev 76) git-svn-id: svn://openib.tc.cornell.edu/gen1@163 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/sdp/include/SdpShared.h b/trunk/ulp/sdp/include/SdpShared.h index 577c4f2b..a6e65320 100644 --- a/trunk/ulp/sdp/include/SdpShared.h +++ b/trunk/ulp/sdp/include/SdpShared.h @@ -11,27 +11,42 @@ // Define the IOCTL codes that will be used for sending the requests down -#define IOCTL_WSP_SOCKET CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED ,FILE_ANY_ACCESS) -#define IOCTL_WSP_CONNECT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED ,FILE_ANY_ACCESS) +#define IOCTL_WSP_SOCKET CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED ,FILE_ANY_ACCESS) +#define IOCTL_WSP_CONNECT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED ,FILE_ANY_ACCESS) +#define IOCTL_WSP_SEND CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED ,FILE_ANY_ACCESS) + // Data structures that are used for connect struct WspSocketIn { - ULONG dwFlags; + ULONG dwFlags; }; struct WspSocketOut { - int Errno; - VOID *pSocket; + int Errno; + VOID *pSocket; }; struct WspConnectIn { VOID *pSocket; - ULONG IP; - USHORT Port; + ULONG IP; + USHORT Port; }; struct WspConnectOut { - int Errno; + int Errno; +}; + +struct WspSendIn { + VOID *pSocket; + CHAR *pData; + ULONG BufferSize; + ULONG dwFlags; +}; + +struct WspSendOut { + ULONG NumberOfBytesSent; + int Errno; }; + #endif //_SDP_SHARED_H diff --git a/trunk/ulp/sdp/kernel/SdpDriver.cpp b/trunk/ulp/sdp/kernel/SdpDriver.cpp index 7166fe3d..d78e8df8 100644 --- a/trunk/ulp/sdp/kernel/SdpDriver.cpp +++ b/trunk/ulp/sdp/kernel/SdpDriver.cpp @@ -389,10 +389,33 @@ NTSTATUS SdpDriver::DispatchDeviceIoControl( SDP_PRINT(SDP_ERR, SDP_DRIVER, ("pSdpSocket->WSPConnect failed rc = 0x%x\n", rc )); goto Cleanup; } - + break; + case IOCTL_WSP_SEND : + { + SDP_PRINT(SDP_DEBUG, SDP_DRIVER, ("IOCTL_WSP_SEND recieved\n" )); + VERIFY_BUFFERS(InputBufferLength, OutputBufferLength, WspSendIn, WspSendOut); + OutputDataSize = sizeof (WspSendOut); - break; + // get the socket based on the users pointer + WspSendIn *pWspSendIn = (WspSendIn *) pInputBuffer; + WspSendOut *pWspSendOut = (WspSendOut *) pOutputBuffer; + pSdpUserFile = (SdpUserFile *)pIrpSp->FileObject->FsContext; + pSdpSocket = pSdpUserFile->SocketByPointer(pWspSendIn->pSocket); + if (pSdpSocket == NULL) { + SDP_PRINT(SDP_DEBUG, SDP_DRIVER, ("IOCTL_WSP_SEND socket %x not found\n",pWspConnectIn->pSocket)); + // This is a well defined winsock error + pWspConnectOut->Errno = WSAENOTSOCK; + goto Cleanup; + } + rc = pSdpSocket->WSPSend(pWspSendIn, pWspSendOut); + if (!NT_SUCCESS(rc)) { + SDP_PRINT(SDP_ERR, SDP_DRIVER, ("pSdpSocket->WSPSend failed rc = 0x%x\n", rc )); + goto Cleanup; + } + } + break; + default: // This is an unrecgnized IOCTL diff --git a/trunk/ulp/sdp/kernel/SdpSocket.cpp b/trunk/ulp/sdp/kernel/SdpSocket.cpp index b895b171..33cd8b22 100644 --- a/trunk/ulp/sdp/kernel/SdpSocket.cpp +++ b/trunk/ulp/sdp/kernel/SdpSocket.cpp @@ -90,6 +90,23 @@ NTSTATUS SdpSocket::Init( return rc; } +NTSTATUS SdpSocket::WSPSend( + WspSendIn *pWspSendIn, + WspSendOut *pWspSendOut + ) +{ + NTSTATUS rc = STATUS_SUCCESS; + SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("this = 0x%p \n",this)); + + pWspSendOut->Errno = 0; + pWspSendOut->NumberOfBytesSent = pWspSendIn->BufferSize; + + return rc; + +} + + + NTSTATUS SdpSocket::WSPConnect( WspConnectIn *pWspConnectIn, WspConnectOut *pWspConnectOut @@ -102,7 +119,7 @@ NTSTATUS SdpSocket::WSPConnect( ib_path_rec_t path_rec; CSpinLockWrapper Lock(m_Lock); - SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("SdpSocket::WSPConnect this = 0x%p remote addresses ip=%d.%d.%d.%d:%d\n", + SDP_PRINT(SDP_TRACE, SDP_SOCKET, ("this = 0x%p remote addresses ip=%d.%d.%d.%d:%d\n", this, (pWspConnectIn->IP & 0XFF000000) >> 24, (pWspConnectIn->IP & 0XFF0000) >> 16, diff --git a/trunk/ulp/sdp/kernel/SdpSocket.h b/trunk/ulp/sdp/kernel/SdpSocket.h index 24e402e2..1850583e 100644 --- a/trunk/ulp/sdp/kernel/SdpSocket.h +++ b/trunk/ulp/sdp/kernel/SdpSocket.h @@ -76,6 +76,11 @@ public: WspConnectOut *pWspConnectOut ); + NTSTATUS WSPSend( + WspSendIn *pWspSendIn, + WspSendOut *pWspSendOut + ); + VOID Shutdown(); diff --git a/trunk/ulp/sdp/kernel/SdpTrace.h b/trunk/ulp/sdp/kernel/SdpTrace.h index 94f68e57..77b15547 100644 --- a/trunk/ulp/sdp/kernel/SdpTrace.h +++ b/trunk/ulp/sdp/kernel/SdpTrace.h @@ -3,18 +3,18 @@ #define H_SDP_TRACE_H // Debug level masks -#define SDP_ALL 0x00000001 -#define SDP_DEBUG 0x00000002 -#define SDP_TRACE 0x00000004 -#define SDP_WARN 0x00000008 -#define SDP_ERR 0x00000010 +#define SDP_ALL 0x00000001 +#define SDP_DEBUG 0x00000002 +#define SDP_TRACE 0x00000004 +#define SDP_WARN 0x00000008 +#define SDP_ERR 0x00000010 // Debug toppics -#define SDP_API 0x000001 -#define SDP_CONNECT 0x000002 -#define SDP_DRIVER 0x000004 -#define SDP_SOCKET 0x000008 -#define SDP_ARP 0x000010 +#define SDP_API 0x000001 +#define SDP_CONNECT 0x000002 +#define SDP_DRIVER 0x000004 +#define SDP_SOCKET 0x000008 +#define SDP_ARP 0x000010 // BUGBUG: CONVERT TO A FUNCTION