Add initial implementations for NDConnector Connect, CompleteConnect,
Accept, and Disconnect.  This is compile tested only and "optimizes for
performance".  (I.e. doesn't provide any error checking on the input
parameters.)

Signed-off-by: Sean Hefty <[email protected]>
---
The winverbs ND provider is still in need of implementations for
SendAndInvalidate, Bind, and Invalidate.

Index: user/nd_adapter.cpp
===================================================================
--- user/nd_adapter.cpp (revision 2100)
+++ user/nd_adapter.cpp (working copy)
@@ -126,7 +126,7 @@
 STDMETHODIMP CNDAdapter::
 CancelOverlappedRequests(void)
 {
-       // TODO: add CancelOverlappedRequests to IWVProtectionDomain for MR
+       m_pWvPd->CancelOverlappedRequests();
        return ND_SUCCESS;
 }
 
Index: user/nd_connect.cpp
===================================================================
--- user/nd_connect.cpp (revision 2100)
+++ user/nd_connect.cpp (working copy)
@@ -116,15 +116,35 @@
                const void* pPrivateData, SIZE_T PrivateDataLength,
                OVERLAPPED* pOverlapped)
 {
-       // TODO
-       return ND_NOT_SUPPORTED;
+       CNDEndpoint                     *ep = (CNDEndpoint *) pEndpoint;
+       WV_SOCKADDR                     addr;
+       WV_CONNECT_PARAM        attr;
+
+       RtlCopyMemory(&addr, pAddress, AddressLength);
+       if (addr.Sa.sa_family == AF_INET) {
+               addr.Sin.sin_port = LocalPort;
+       } else {
+               addr.Sin6.sin6_port = LocalPort;
+       }
+
+       RtlZeroMemory(&attr, sizeof attr);
+       if ((attr.DataLength = PrivateDataLength)) {
+               RtlCopyMemory(attr.Data, pPrivateData, PrivateDataLength);
+       }
+       attr.ResponderResources = ep->m_ResponderResources;
+       attr.InitiatorDepth = ep->m_InitiatorDepth;
+       attr.RetryCount = 7;
+
+       return m_pWvConnEp->Connect(ep->m_pWvQp, &addr.Sa, &attr, pOverlapped);
 }
 
 STDMETHODIMP CNDConnector::
 CompleteConnect(OVERLAPPED* pOverlapped)
 {
-       // TODO
-       return ND_NOT_SUPPORTED;
+       WV_CONNECT_PARAM        attr;
+
+       RtlZeroMemory(&attr, sizeof attr);
+       return m_pWvConnEp->Accept(NULL, &attr, pOverlapped);
 }
 
 STDMETHODIMP CNDConnector::
@@ -132,8 +152,17 @@
           const void* pPrivateData, SIZE_T PrivateDataLength,
           OVERLAPPED* pOverlapped)
 {
-       // TODO
-       return ND_NOT_SUPPORTED;
+       CNDEndpoint                     *ep = (CNDEndpoint *) pEndpoint;
+       WV_CONNECT_PARAM        attr;
+
+       RtlZeroMemory(&attr, sizeof attr);
+       if ((attr.DataLength = PrivateDataLength)) {
+               RtlCopyMemory(attr.Data, pPrivateData, PrivateDataLength);
+       }
+       attr.ResponderResources = ep->m_ResponderResources;
+       attr.InitiatorDepth = ep->m_InitiatorDepth;
+
+       return m_pWvConnEp->Accept(ep->m_pWvQp, &attr, pOverlapped);
 }
 
 STDMETHODIMP CNDConnector::
@@ -226,6 +255,5 @@
 STDMETHODIMP CNDConnector::
 Disconnect(OVERLAPPED* pOverlapped)
 {
-       // TODO
-       return ND_NOT_SUPPORTED;
+       return m_pWvConnEp->Disconnect(pOverlapped);
 }
Index: user/nd_ep.cpp
===================================================================
--- user/nd_ep.cpp      (revision 2100)
+++ user/nd_ep.cpp      (working copy)
@@ -58,6 +58,8 @@
 
        m_pInboundCq->AddRef();
        m_pOutboundCq->AddRef();
+       m_InitiatorDepth = OutboundReadLimit;
+       m_ResponderResources = InboundReadLimit;
 
        RtlZeroMemory(&create, sizeof create);
        create.pSendCq = pOutboundCq->m_pWvCq;
Index: user/nd_ep.h
===================================================================
--- user/nd_ep.h        (revision 2100)
+++ user/nd_ep.h        (working copy)
@@ -108,11 +108,14 @@
                return hr;
        }
 
+       IWVConnectQueuePair     *m_pWvQp;
+       SIZE_T                          m_InitiatorDepth;
+       SIZE_T                          m_ResponderResources;
+
 protected:
        CNDConnector            *m_pConnector;
        CNDCompletionQueue      *m_pInboundCq;
        CNDCompletionQueue      *m_pOutboundCq;
-       IWVConnectQueuePair     *m_pWvQp;
 
        STDMETHODIMP Init(CNDCompletionQueue* pInboundCq, CNDCompletionQueue* 
pOutboundCq,
                                          SIZE_T nInboundEntries, SIZE_T 
nOutboundEntries,


_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to