Lines Matching refs:qp
28 struct nvmf_tcp_qpair *qp; member
64 struct nvmf_qpair qp; member
84 #define TQP(qp) ((struct nvmf_tcp_qpair *)(qp)) argument
95 tcp_alloc_command_buffer(struct nvmf_tcp_qpair *qp, void *data, in tcp_alloc_command_buffer() argument
102 cb->qp = qp; in tcp_alloc_command_buffer()
111 LIST_INSERT_HEAD(&qp->rx_buffers, cb, link); in tcp_alloc_command_buffer()
113 LIST_INSERT_HEAD(&qp->tx_buffers, cb, link); in tcp_alloc_command_buffer()
118 tcp_find_command_buffer(struct nvmf_tcp_qpair *qp, uint16_t cid, uint16_t ttag, in tcp_find_command_buffer() argument
124 list = receive ? &qp->rx_buffers : &qp->tx_buffers; in tcp_find_command_buffer()
133 tcp_purge_command_buffer(struct nvmf_tcp_qpair *qp, uint16_t cid, uint16_t ttag, in tcp_purge_command_buffer() argument
138 cb = tcp_find_command_buffer(qp, cid, ttag, receive); in tcp_purge_command_buffer()
151 nvmf_tcp_write_pdu(struct nvmf_tcp_qpair *qp, const void *pdu, size_t len) in nvmf_tcp_write_pdu() argument
158 nwritten = write(qp->s, cp, len); in nvmf_tcp_write_pdu()
168 nvmf_tcp_write_pdu_iov(struct nvmf_tcp_qpair *qp, struct iovec *iov, in nvmf_tcp_write_pdu_iov() argument
174 nwritten = writev(qp->s, iov, iovcnt); in nvmf_tcp_write_pdu_iov()
194 nvmf_tcp_report_error(struct nvmf_association *na, struct nvmf_tcp_qpair *qp, in nvmf_tcp_report_error() argument
219 (void)nvmf_tcp_write_pdu_iov(qp, iov, nitems(iov), sizeof(hdr) + hlen); in nvmf_tcp_report_error()
220 close(qp->s); in nvmf_tcp_report_error()
221 qp->s = -1; in nvmf_tcp_report_error()
225 nvmf_tcp_validate_pdu(struct nvmf_tcp_qpair *qp, struct nvmf_tcp_rxpdu *pdu, in nvmf_tcp_validate_pdu() argument
243 qp->qp.nq_association->na_controller, qp->header_digests, in nvmf_tcp_validate_pdu()
244 qp->data_digests, qp->rxpda, &data_len, &fes, &fei); in nvmf_tcp_validate_pdu()
247 close(qp->s); in nvmf_tcp_validate_pdu()
248 qp->s = -1; in nvmf_tcp_validate_pdu()
250 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_validate_pdu()
263 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_validate_pdu()
309 nvmf_tcp_read_pdu(struct nvmf_tcp_qpair *qp, struct nvmf_tcp_rxpdu *pdu) in nvmf_tcp_read_pdu() argument
316 error = nvmf_tcp_read_buffer(qp->s, &ch, sizeof(ch)); in nvmf_tcp_read_pdu()
328 error = nvmf_tcp_validate_pdu(qp, pdu, sizeof(ch)); in nvmf_tcp_read_pdu()
337 error = nvmf_tcp_read_buffer(qp->s, pdu->hdr + 1, plen - sizeof(ch)); in nvmf_tcp_read_pdu()
340 error = nvmf_tcp_validate_pdu(qp, pdu, plen); in nvmf_tcp_read_pdu()
369 nvmf_tcp_save_command_capsule(struct nvmf_tcp_qpair *qp, in nvmf_tcp_save_command_capsule() argument
378 nc = nvmf_allocate_command(&qp->qp, &cmd->ccsqe); in nvmf_tcp_save_command_capsule()
385 TAILQ_INSERT_TAIL(&qp->rx_capsules, tc, link); in nvmf_tcp_save_command_capsule()
390 nvmf_tcp_save_response_capsule(struct nvmf_tcp_qpair *qp, in nvmf_tcp_save_response_capsule() argument
399 nc = nvmf_allocate_response(&qp->qp, &rsp->rccqe); in nvmf_tcp_save_response_capsule()
407 TAILQ_INSERT_TAIL(&qp->rx_capsules, tc, link); in nvmf_tcp_save_response_capsule()
413 tcp_purge_command_buffer(qp, rsp->rccqe.cid, 0, true); in nvmf_tcp_save_response_capsule()
414 tcp_purge_command_buffer(qp, rsp->rccqe.cid, 0, false); in nvmf_tcp_save_response_capsule()
425 nvmf_tcp_construct_pdu(struct nvmf_tcp_qpair *qp, void *hdr, size_t hlen, in nvmf_tcp_construct_pdu() argument
434 if (qp->header_digests) in nvmf_tcp_construct_pdu()
437 pdo = roundup(plen, qp->txpda); in nvmf_tcp_construct_pdu()
440 if (qp->data_digests) in nvmf_tcp_construct_pdu()
450 if (qp->header_digests) in nvmf_tcp_construct_pdu()
452 if (qp->data_digests && data_len != 0) in nvmf_tcp_construct_pdu()
463 if (qp->header_digests) { in nvmf_tcp_construct_pdu()
484 if (qp->data_digests) { in nvmf_tcp_construct_pdu()
492 return (nvmf_tcp_write_pdu_iov(qp, iov, iovcnt, plen)); in nvmf_tcp_construct_pdu()
496 nvmf_tcp_handle_h2c_data(struct nvmf_tcp_qpair *qp, struct nvmf_tcp_rxpdu *pdu) in nvmf_tcp_handle_h2c_data() argument
504 if (le32toh(h2c->datal) > qp->maxh2cdata) { in nvmf_tcp_handle_h2c_data()
505 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_h2c_data()
512 cb = tcp_find_command_buffer(qp, h2c->cccid, h2c->ttag, true); in nvmf_tcp_handle_h2c_data()
514 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_h2c_data()
524 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_h2c_data()
535 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_h2c_data()
543 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_h2c_data()
552 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_h2c_data()
569 nvmf_tcp_handle_c2h_data(struct nvmf_tcp_qpair *qp, struct nvmf_tcp_rxpdu *pdu) in nvmf_tcp_handle_c2h_data() argument
578 cb = tcp_find_command_buffer(qp, c2h->cccid, 0, true); in nvmf_tcp_handle_c2h_data()
584 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_c2h_data()
594 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_c2h_data()
605 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_c2h_data()
613 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_c2h_data()
622 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_c2h_data()
642 nc = nvmf_allocate_response(&qp->qp, &cqe); in nvmf_tcp_handle_c2h_data()
650 TAILQ_INSERT_TAIL(&qp->rx_capsules, tc, link); in nvmf_tcp_handle_c2h_data()
659 tcp_send_h2c_pdu(struct nvmf_tcp_qpair *qp, uint16_t cid, uint16_t ttag, in tcp_send_h2c_pdu() argument
673 return (nvmf_tcp_construct_pdu(qp, &h2c, sizeof(h2c), buf, len)); in tcp_send_h2c_pdu()
678 tcp_send_h2c_pdus(struct nvmf_tcp_qpair *qp, uint16_t cid, uint16_t ttag, in tcp_send_h2c_pdus() argument
689 if (todo > qp->maxh2cdata) in tcp_send_h2c_pdus()
690 todo = qp->maxh2cdata; in tcp_send_h2c_pdus()
691 error = tcp_send_h2c_pdu(qp, cid, ttag, data_offset, p, todo, in tcp_send_h2c_pdus()
702 nvmf_tcp_handle_r2t(struct nvmf_tcp_qpair *qp, struct nvmf_tcp_rxpdu *pdu) in nvmf_tcp_handle_r2t() argument
711 cb = tcp_find_command_buffer(qp, r2t->cccid, 0, false); in nvmf_tcp_handle_r2t()
713 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_r2t()
723 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_r2t()
736 nvmf_tcp_report_error(qp->qp.nq_association, qp, in nvmf_tcp_handle_r2t()
749 error = tcp_send_h2c_pdus(qp, r2t->cccid, r2t->ttag, in nvmf_tcp_handle_r2t()
757 nvmf_tcp_receive_pdu(struct nvmf_tcp_qpair *qp) in nvmf_tcp_receive_pdu() argument
762 error = nvmf_tcp_read_pdu(qp, &pdu); in nvmf_tcp_receive_pdu()
774 return (nvmf_tcp_save_command_capsule(qp, &pdu)); in nvmf_tcp_receive_pdu()
776 return (nvmf_tcp_save_response_capsule(qp, &pdu)); in nvmf_tcp_receive_pdu()
778 return (nvmf_tcp_handle_h2c_data(qp, &pdu)); in nvmf_tcp_receive_pdu()
780 return (nvmf_tcp_handle_c2h_data(qp, &pdu)); in nvmf_tcp_receive_pdu()
782 return (nvmf_tcp_handle_r2t(qp, &pdu)); in nvmf_tcp_receive_pdu()
787 nvmf_tcp_validate_ic_pdu(struct nvmf_association *na, struct nvmf_tcp_qpair *qp, in nvmf_tcp_validate_ic_pdu() argument
810 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
822 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
832 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
842 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
851 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
860 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
871 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
879 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
887 nvmf_tcp_report_error(na, qp, in nvmf_tcp_validate_ic_pdu()
897 nvmf_tcp_read_ic_req(struct nvmf_association *na, struct nvmf_tcp_qpair *qp, in nvmf_tcp_read_ic_req() argument
902 error = nvmf_tcp_read_buffer(qp->s, pdu, sizeof(*pdu)); in nvmf_tcp_read_ic_req()
909 return (nvmf_tcp_validate_ic_pdu(na, qp, &pdu->common, sizeof(*pdu))); in nvmf_tcp_read_ic_req()
913 nvmf_tcp_read_ic_resp(struct nvmf_association *na, struct nvmf_tcp_qpair *qp, in nvmf_tcp_read_ic_resp() argument
918 error = nvmf_tcp_read_buffer(qp->s, pdu, sizeof(*pdu)); in nvmf_tcp_read_ic_resp()
925 return (nvmf_tcp_validate_ic_pdu(na, qp, &pdu->common, sizeof(*pdu))); in nvmf_tcp_read_ic_resp()
962 tcp_connect(struct nvmf_tcp_qpair *qp, struct nvmf_association *na, bool admin) in tcp_connect() argument
994 error = nvmf_tcp_write_pdu(qp, &ic_req, sizeof(ic_req)); in tcp_connect()
1000 if (!nvmf_tcp_read_ic_resp(na, qp, &ic_resp)) in tcp_connect()
1009 nvmf_tcp_report_error(na, qp, in tcp_connect()
1023 nvmf_tcp_report_error(na, qp, in tcp_connect()
1029 qp->rxpda = (params->tcp.pda + 1) * 4; in tcp_connect()
1030 qp->txpda = (ic_resp.cpda + 1) * 4; in tcp_connect()
1031 qp->header_digests = ic_resp.dgst.bits.hdgst_enable != 0; in tcp_connect()
1032 qp->data_digests = ic_resp.dgst.bits.ddgst_enable != 0; in tcp_connect()
1033 qp->maxr2t = params->tcp.maxr2t; in tcp_connect()
1034 qp->maxh2cdata = maxh2cdata; in tcp_connect()
1037 qp->max_icd = 8192; in tcp_connect()
1039 qp->max_icd = (ta->ioccsz - 4) * 16; in tcp_connect()
1045 tcp_accept(struct nvmf_tcp_qpair *qp, struct nvmf_association *na) in tcp_accept() argument
1052 if (!nvmf_tcp_read_ic_req(na, qp, &ic_req)) in tcp_accept()
1067 error = nvmf_tcp_write_pdu(qp, &ic_resp, sizeof(ic_resp)); in tcp_accept()
1074 qp->rxpda = (params->tcp.pda + 1) * 4; in tcp_accept()
1075 qp->txpda = (ic_req.hpda + 1) * 4; in tcp_accept()
1076 qp->header_digests = ic_resp.dgst.bits.hdgst_enable != 0; in tcp_accept()
1077 qp->data_digests = ic_resp.dgst.bits.ddgst_enable != 0; in tcp_accept()
1078 qp->maxr2t = le32toh(ic_req.maxr2t); in tcp_accept()
1079 qp->maxh2cdata = params->tcp.maxh2cdata; in tcp_accept()
1080 qp->max_icd = 0; /* XXX */ in tcp_accept()
1089 struct nvmf_tcp_qpair *qp; in tcp_allocate_qpair() local
1097 qp = calloc(1, sizeof(*qp)); in tcp_allocate_qpair()
1098 qp->s = qparams->tcp.fd; in tcp_allocate_qpair()
1099 LIST_INIT(&qp->rx_buffers); in tcp_allocate_qpair()
1100 LIST_INIT(&qp->tx_buffers); in tcp_allocate_qpair()
1101 TAILQ_INIT(&qp->rx_capsules); in tcp_allocate_qpair()
1103 error = tcp_accept(qp, na); in tcp_allocate_qpair()
1105 error = tcp_connect(qp, na, qparams->admin); in tcp_allocate_qpair()
1107 free(qp); in tcp_allocate_qpair()
1111 return (&qp->qp); in tcp_allocate_qpair()
1117 struct nvmf_tcp_qpair *qp = TQP(nq); in tcp_free_qpair() local
1121 TAILQ_FOREACH_SAFE(tc, &qp->rx_capsules, link, ntc) { in tcp_free_qpair()
1122 TAILQ_REMOVE(&qp->rx_capsules, tc, link); in tcp_free_qpair()
1125 LIST_FOREACH_SAFE(cb, &qp->rx_buffers, link, ncb) { in tcp_free_qpair()
1128 LIST_FOREACH_SAFE(cb, &qp->tx_buffers, link, ncb) { in tcp_free_qpair()
1131 free(qp); in tcp_free_qpair()
1137 struct nvmf_tcp_qpair *qp = TQP(nq); in tcp_kernel_handoff_params() local
1139 nvlist_add_number(nvl, "fd", qp->s); in tcp_kernel_handoff_params()
1140 nvlist_add_number(nvl, "rxpda", qp->rxpda); in tcp_kernel_handoff_params()
1141 nvlist_add_number(nvl, "txpda", qp->txpda); in tcp_kernel_handoff_params()
1142 nvlist_add_bool(nvl, "header_digests", qp->header_digests); in tcp_kernel_handoff_params()
1143 nvlist_add_bool(nvl, "data_digests", qp->data_digests); in tcp_kernel_handoff_params()
1144 nvlist_add_number(nvl, "maxr2t", qp->maxr2t); in tcp_kernel_handoff_params()
1145 nvlist_add_number(nvl, "maxh2cdata", qp->maxh2cdata); in tcp_kernel_handoff_params()
1146 nvlist_add_number(nvl, "max_icd", qp->max_icd); in tcp_kernel_handoff_params()
1152 struct nvmf_tcp_qpair *qp = TQP(nq); in tcp_populate_dle() local
1157 if (getpeername(qp->s, (struct sockaddr *)&ss, &ss_len) == -1) in tcp_populate_dle()
1169 tcp_allocate_capsule(struct nvmf_qpair *qp __unused) in tcp_allocate_capsule()
1191 struct nvmf_tcp_qpair *qp = TQP(nc->nc_qpair); in tcp_transmit_command() local
1200 nc->nc_data_len <= qp->max_icd) in tcp_transmit_command()
1221 error = nvmf_tcp_construct_pdu(qp, &cmd, sizeof(cmd), use_icd ? in tcp_transmit_command()
1231 tc->cb = tcp_alloc_command_buffer(qp, nc->nc_data, 0, in tcp_transmit_command()
1240 struct nvmf_tcp_qpair *qp = TQP(nc->nc_qpair); in tcp_transmit_response() local
1247 return (nvmf_tcp_construct_pdu(qp, &rsp, sizeof(rsp), NULL, 0)); in tcp_transmit_response()
1262 struct nvmf_tcp_qpair *qp = TQP(nq); in tcp_receive_capsule() local
1266 while (TAILQ_EMPTY(&qp->rx_capsules)) { in tcp_receive_capsule()
1267 error = nvmf_tcp_receive_pdu(qp); in tcp_receive_capsule()
1271 tc = TAILQ_FIRST(&qp->rx_capsules); in tcp_receive_capsule()
1272 TAILQ_REMOVE(&qp->rx_capsules, tc, link); in tcp_receive_capsule()
1321 tcp_send_r2t(struct nvmf_tcp_qpair *qp, uint16_t cid, uint16_t ttag, in tcp_send_r2t() argument
1333 return (nvmf_tcp_construct_pdu(qp, &r2t, sizeof(r2t), NULL, 0)); in tcp_send_r2t()
1340 struct nvmf_tcp_qpair *qp = TQP(nc->nc_qpair); in tcp_receive_r2t_data() local
1349 ttag = qp->next_ttag++; in tcp_receive_r2t_data()
1351 error = tcp_send_r2t(qp, nc->nc_sqe.cid, ttag, data_offset, len); in tcp_receive_r2t_data()
1355 cb = tcp_alloc_command_buffer(qp, buf, data_offset, len, in tcp_receive_r2t_data()
1360 error = nvmf_tcp_receive_pdu(qp); in tcp_receive_r2t_data()
1404 tcp_send_c2h_pdu(struct nvmf_tcp_qpair *qp, uint16_t cid, in tcp_send_c2h_pdu() argument
1420 return (nvmf_tcp_construct_pdu(qp, &c2h, sizeof(c2h), in tcp_send_c2h_pdu()
1429 struct nvmf_tcp_qpair *qp = TQP(nc->nc_qpair); in tcp_send_controller_data() local
1453 send_success_flag = !qp->qp.nq_flow_control; in tcp_send_controller_data()
1469 error = tcp_send_c2h_pdu(qp, nc->nc_sqe.cid, data_offset, in tcp_send_controller_data()