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