Blame IbAccess/Common/Ibt/Cm/cm_common.c

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
}