2450 memset(&rep, 0, sizeof rep);
2451 rep.status = status;
2452 if (status == IB_SIDR_SUCCESS) {
2453 rep.qp_num = id_priv->qp_num;
2454 rep.qkey = id_priv->qkey;
2455 }
2456 rep.private_data = private_data;
2457 rep.private_data_len = private_data_len;
2458
2459 return ib_send_cm_sidr_rep(id_priv->cm_id.ib, &rep);
2460}
2461
2462int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
2463{
2464 struct rdma_id_private *id_priv;
2465 int ret;
2466
2467 id_priv = container_of(id, struct rdma_id_private, id);
2468 if (!cma_comp(id_priv, CMA_CONNECT))
2469 return -EINVAL;
2470
2471 if (!id->qp && conn_param) {
2472 id_priv->qp_num = conn_param->qp_num;
2473 id_priv->srq = conn_param->srq;
2474 }
2475
2476 switch (rdma_node_get_transport(id->device->node_type)) {
2477 case RDMA_TRANSPORT_IB:
2478 if (cma_is_ud_ps(id->ps))
2479 ret = cma_send_sidr_rep(id_priv, IB_SIDR_SUCCESS,
2480 conn_param->private_data,
2481 conn_param->private_data_len);
2482 else if (conn_param)
2483 ret = cma_accept_ib(id_priv, conn_param);
2484 else
2485 ret = cma_rep_recv(id_priv);
2486 break;
2487 case RDMA_TRANSPORT_IWARP:
2488 ret = cma_accept_iw(id_priv, conn_param);
2489 break;
2490 default: