|
Packit |
857059 |
/* BEGIN_ICS_COPYRIGHT6 ****************************************
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Copyright (c) 2015, Intel Corporation
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Redistribution and use in source and binary forms, with or without
|
|
Packit |
857059 |
modification, are permitted provided that the following conditions are met:
|
|
Packit |
857059 |
|
|
Packit |
857059 |
* Redistributions of source code must retain the above copyright notice,
|
|
Packit |
857059 |
this list of conditions and the following disclaimer.
|
|
Packit |
857059 |
* Redistributions in binary form must reproduce the above copyright
|
|
Packit |
857059 |
notice, this list of conditions and the following disclaimer in the
|
|
Packit |
857059 |
documentation and/or other materials provided with the distribution.
|
|
Packit |
857059 |
* Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
857059 |
may be used to endorse or promote products derived from this software
|
|
Packit |
857059 |
without specific prior written permission.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
857059 |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
857059 |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
Packit |
857059 |
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
Packit |
857059 |
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit |
857059 |
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
Packit |
857059 |
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
Packit |
857059 |
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
Packit |
857059 |
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit |
857059 |
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
** END_ICS_COPYRIGHT6 ****************************************/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Common code between user and kernel level CM
|
|
Packit |
857059 |
#include "ib_cm.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// backwards compatibilty functions
|
|
Packit |
857059 |
IB_HANDLE
|
|
Packit |
857059 |
CmCreateCEP(
|
|
Packit |
857059 |
CM_CEP_TYPE TransportServiceType
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_create_cep(TransportServiceType);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmDestroyCEP(IB_HANDLE hCEP)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_destroy_cep(hCEP);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmModifyCEP(
|
|
Packit |
857059 |
IB_HANDLE hCEP,
|
|
Packit |
857059 |
uint32 AttrType,
|
|
Packit |
857059 |
const char* AttrValue,
|
|
Packit |
857059 |
uint32 AttrLen,
|
|
Packit |
857059 |
uint32 Offset
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_modify_cep( hCEP, AttrType, AttrValue, AttrLen, Offset);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmConnect(
|
|
Packit |
857059 |
IB_HANDLE hCEP,
|
|
Packit |
857059 |
const CM_REQUEST_INFO* pConnectRequest,
|
|
Packit |
857059 |
PFN_CM_CALLBACK pfnConnectCB,
|
|
Packit |
857059 |
void* Context
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_connect(hCEP, pConnectRequest, pfnConnectCB, Context);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmConnectPeer(
|
|
Packit |
857059 |
IB_HANDLE hCEP,
|
|
Packit |
857059 |
const CM_REQUEST_INFO* pConnectRequest,
|
|
Packit |
857059 |
PFN_CM_CALLBACK pfnConnectCB,
|
|
Packit |
857059 |
void* Context
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_connect_peer( hCEP, pConnectRequest, pfnConnectCB, Context);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmListen(
|
|
Packit |
857059 |
IN IB_HANDLE hCEP,
|
|
Packit |
857059 |
IN const CM_LISTEN_INFO* pListenInfo,
|
|
Packit |
857059 |
IN PFN_CM_CALLBACK pfnListenCB,
|
|
Packit |
857059 |
IN void* Context
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_listen( hCEP, pListenInfo, pfnListenCB, Context);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmWait(
|
|
Packit |
857059 |
IB_HANDLE CEPHandleArray[],
|
|
Packit |
857059 |
CM_CONN_INFO* ConnInfoArray[],
|
|
Packit |
857059 |
uint32 ArrayCount,
|
|
Packit |
857059 |
uint32 Timeout_us
|
|
Packit |
857059 |
//EVENT_HANDLE hWaitEvent // Associate the array of handles to this event
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_wait(CEPHandleArray, ConnInfoArray, ArrayCount, Timeout_us);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmAccept(
|
|
Packit |
857059 |
IN IB_HANDLE hCEP,
|
|
Packit |
857059 |
IN CM_CONN_INFO* pSendConnInfo, // Send REP
|
|
Packit |
857059 |
OUT CM_CONN_INFO* pRecvConnInfo, // Rcvd RTU, REJ or TIMEOUT
|
|
Packit |
857059 |
IN PFN_CM_CALLBACK pfnCallback,
|
|
Packit |
857059 |
IN void* Context,
|
|
Packit |
857059 |
OUT IB_HANDLE* hNewCEP
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_accept( hCEP, pSendConnInfo, pRecvConnInfo, pfnCallback,
|
|
Packit |
857059 |
Context, hNewCEP);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmReject(
|
|
Packit |
857059 |
IN IB_HANDLE hCEP,
|
|
Packit |
857059 |
IN const CM_REJECT_INFO* pConnectReject
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_reject( hCEP, pConnectReject);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmCancel(
|
|
Packit |
857059 |
IN IB_HANDLE hCEP
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_cancel( hCEP);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
CmDisconnect(
|
|
Packit |
857059 |
IN IB_HANDLE hCEP,
|
|
Packit |
857059 |
IN const CM_DREQUEST_INFO* pDRequest, // Send DREQ
|
|
Packit |
857059 |
IN const CM_DREPLY_INFO* pDReply // Send DREP
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_disconnect( hCEP, pDRequest, pDReply);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
SIDRRegister(
|
|
Packit |
857059 |
IN IB_HANDLE hCEP,
|
|
Packit |
857059 |
IN const SIDR_REGISTER_INFO* pSIDRRegisterInfo,
|
|
Packit |
857059 |
PFN_CM_CALLBACK pfnLookupCallback,
|
|
Packit |
857059 |
void* Context
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_sidr_register( hCEP, pSIDRRegisterInfo, pfnLookupCallback,
|
|
Packit |
857059 |
Context);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
SIDRDeregister(
|
|
Packit |
857059 |
IB_HANDLE hCEP
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_sidr_deregister(hCEP);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
SIDRResponse(
|
|
Packit |
857059 |
IN IB_HANDLE hCEP,
|
|
Packit |
857059 |
const SIDR_RESP_INFO* pSIDRResponse
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_sidr_response( hCEP, pSIDRResponse);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS
|
|
Packit |
857059 |
SIDRQuery(
|
|
Packit |
857059 |
IB_HANDLE hCEP,
|
|
Packit |
857059 |
const SIDR_REQ_INFO* pSIDRRequest,
|
|
Packit |
857059 |
PFN_CM_CALLBACK pfnQueryCB,
|
|
Packit |
857059 |
void* Context
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
return iba_cm_sidr_query( hCEP, pSIDRRequest, pfnQueryCB, Context);
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static const char* const CmRejectionCodeText[] = {
|
|
Packit |
857059 |
"Unknown CM Rejection Code",
|
|
Packit |
857059 |
"RC_NO_QP",
|
|
Packit |
857059 |
"RC_NO_EEC",
|
|
Packit |
857059 |
"RC_NO_RESOURCES",
|
|
Packit |
857059 |
"RC_TIMEOUT",
|
|
Packit |
857059 |
"RC_UNSUPPORTED_REQ",
|
|
Packit |
857059 |
"RC_INVALID_COMMID",
|
|
Packit |
857059 |
"RC_INVALID_COMMINST",
|
|
Packit |
857059 |
"RC_INVALID_SID",
|
|
Packit |
857059 |
"RC_INVALID_TSTYPE",
|
|
Packit |
857059 |
"RC_STALE_CONN",
|
|
Packit |
857059 |
"RC_INVALID_RDC",
|
|
Packit |
857059 |
"RC_PRIMARY_DGID_REJ",
|
|
Packit |
857059 |
"RC_PRIMARY_DLID_REJ",
|
|
Packit |
857059 |
"RC_INVALID_PRIMARY_SL",
|
|
Packit |
857059 |
"RC_INVALID_PRIMARY_TC",
|
|
Packit |
857059 |
"RC_INVALID_PRIMARY_HL",
|
|
Packit |
857059 |
"RC_INVALID_PRIMARY_PR",
|
|
Packit |
857059 |
"RC_ALTERNATE_DGID",
|
|
Packit |
857059 |
"RC_ALTERNATE_DLID",
|
|
Packit |
857059 |
"RC_INVALID_ALTERNATE_SL",
|
|
Packit |
857059 |
"RC_INVALID_ALTERNATE_TC",
|
|
Packit |
857059 |
"RC_INVALID_ALTERNATE_HL",
|
|
Packit |
857059 |
"RC_INVALID_ALTERNATE_PR",
|
|
Packit |
857059 |
"RC_CMPORT_REDIR",
|
|
Packit |
857059 |
"RC_INVALID_PATHMTU",
|
|
Packit |
857059 |
"RC_INSUFFICIENT_RESP_RES",
|
|
Packit |
857059 |
"RC_USER_REJ",
|
|
Packit |
857059 |
"RC_RNRCOUNT_REJ"
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
const char* iba_cm_rejection_code_msg(uint16 code)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
if (code >= (unsigned)(sizeof(CmRejectionCodeText)/sizeof(char*)))
|
|
Packit |
857059 |
return "Unknown CM Rejection Code";
|
|
Packit |
857059 |
else
|
|
Packit |
857059 |
return CmRejectionCodeText[code];
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static const char* const CmAprStatusText[] = {
|
|
Packit |
857059 |
"APS_PATH_LOADED",
|
|
Packit |
857059 |
"APS_INVALID_COMMID",
|
|
Packit |
857059 |
"APS_UNSUPPORTED_REQ",
|
|
Packit |
857059 |
"APS_REJECTED",
|
|
Packit |
857059 |
"APS_CMPORT_REDIR",
|
|
Packit |
857059 |
"APS_DUPLICATE_PATH",
|
|
Packit |
857059 |
"APS_ENDPOINT_MISMATCH",
|
|
Packit |
857059 |
"APS_REJECT_DLID",
|
|
Packit |
857059 |
"APS_REJECT_DGID",
|
|
Packit |
857059 |
"APS_REJECT_FL",
|
|
Packit |
857059 |
"APS_REJECT_TC",
|
|
Packit |
857059 |
"APS_REJECT_HL",
|
|
Packit |
857059 |
"APS_REJECT_PR",
|
|
Packit |
857059 |
"APS_REJECT_SL"
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
const char* iba_cm_apr_status_msg(uint16 code)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
if (code >= (unsigned)(sizeof(CmAprStatusText)/sizeof(char*)))
|
|
Packit |
857059 |
return "Unknown CM APS Status";
|
|
Packit |
857059 |
else
|
|
Packit |
857059 |
return CmAprStatusText[code];
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static const char* const CmSidrRespStatusText[] = {
|
|
Packit |
857059 |
"SRS_VALID_QPN",
|
|
Packit |
857059 |
"SRS_SID_NOT_SUPPORTED",
|
|
Packit |
857059 |
"SRS_S_PROVIDER_REJECTED",
|
|
Packit |
857059 |
"SRS_QP_UNAVAILABLE",
|
|
Packit |
857059 |
"SRS_REDIRECT",
|
|
Packit |
857059 |
"SRS_VERSION_NOT_SUPPORTED"
|
|
Packit |
857059 |
// 6-255 reserved
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
const char* iba_cm_sidr_resp_status_msg(uint8 code)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
if (code >= (unsigned)(sizeof(CmSidrRespStatusText)/sizeof(char*)))
|
|
Packit |
857059 |
return "Unknown CM SIDR Resp Status";
|
|
Packit |
857059 |
else
|
|
Packit |
857059 |
return CmSidrRespStatusText[code];
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static const char* const CmRepFailoverText[] = {
|
|
Packit |
857059 |
"CM_REP_FO_ACCEPTED",
|
|
Packit |
857059 |
"CM_REP_FO_NOT_SUPPORTED",
|
|
Packit |
857059 |
"CM_REP_FO_REJECTED_ALT"
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
const char* iba_cm_rep_failover_msg(uint8 code)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
if (code >= (unsigned)(sizeof(CmRepFailoverText)/sizeof(char*)))
|
|
Packit |
857059 |
return "Unknown CM Failover Reply";
|
|
Packit |
857059 |
else
|
|
Packit |
857059 |
return CmRepFailoverText[code];
|
|
Packit |
857059 |
}
|