Lines Matching defs:pdu
180 * pdu The PDU
190 read_pdu_data(pdu_t *pdu, uint8_t *data, uint32_t offset)
196 connection_t *conn = pdu->pdu_connection;
199 ntoh3(pdu->pdu_hdr.pduh_DataSegmentLength)));
200 if (!(len = ntoh3(pdu->pdu_hdr.pduh_DataSegmentLength))) {
218 handle_connection_error(pdu->pdu_connection,
222 pdu->pdu_temp_data = data;
223 pdu->pdu_temp_data_len = len;
226 pdu->pdu_io_vec[0].iov_base = data + offset;
227 pdu->pdu_io_vec[0].iov_len = len;
229 uio = &pdu->pdu_uio;
231 uio->uio_iov = pdu->pdu_io_vec;
246 pdu->pdu_io_vec[i].iov_base = &pdu->pdu_data_digest;
247 pdu->pdu_io_vec[i].iov_len = 4;
252 if (my_soo_read(conn, &pdu->pdu_uio, MSG_WAITALL) != 0) {
258 if (digest != pdu->pdu_data_digest) {
260 digest, pdu->pdu_data_digest));
261 switch (pdu->pdu_hdr.pduh_Opcode & OPCODE_MASK) {
264 send_snack(pdu->pdu_connection, pdu, NULL, SNACK_STATUS_NAK);
268 send_snack(pdu->pdu_connection, pdu, NULL, SNACK_DATA_NAK);
287 * pdu The received PDU
295 collect_text_data(pdu_t *pdu, ccb_t *req_ccb)
302 nlen = req_ccb->ccb_text_len + pdu->pdu_temp_data_len;
311 memcpy(&newp[req_ccb->ccb_text_len], pdu->pdu_temp_data, pdu->pdu_temp_data_len);
314 free(pdu->pdu_temp_data, M_TEMP);
317 pdu->pdu_temp_data = newp;
318 pdu->pdu_temp_data_len = nlen;
321 if (pdu->pdu_hdr.pduh_Flags & FLAG_CONTINUE) {
322 req_ccb->ccb_text_data = pdu->pdu_temp_data;
323 req_ccb->ccb_text_len = pdu->pdu_temp_data_len;
324 pdu->pdu_temp_data = NULL;
326 acknowledge_text(req_ccb->ccb_connection, pdu, req_ccb);
445 * pdu The PDU
450 receive_login_pdu(connection_t *conn, pdu_t *pdu, ccb_t *req_ccb)
455 pdu->pdu_hdr.pduh_Opcode, pdu->pdu_hdr.pduh_Flags,
456 ntohl(pdu->pdu_hdr.pduh_p.login_rsp.StatSN)));
464 if (pdu->pdu_hdr.pduh_p.login_rsp.StatusClass) {
466 pdu->pdu_hdr.pduh_p.login_rsp.StatusClass,
467 pdu->pdu_hdr.pduh_p.login_rsp.StatusDetail));
474 ntohl(pdu->pdu_hdr.pduh_p.login_rsp.StatSN) + 1;
475 } else if (check_StatSN(conn, pdu->pdu_hdr.pduh_p.login_rsp.StatSN, TRUE))
478 if (pdu->pdu_temp_data_len) {
479 if ((rc = collect_text_data(pdu, req_ccb)) != 0)
483 negotiate_login(conn, pdu, req_ccb);
496 * pdu The PDU
501 receive_text_response_pdu(connection_t *conn, pdu_t *pdu, ccb_t *req_ccb)
506 pdu->pdu_hdr.pduh_Opcode, pdu->pdu_hdr.pduh_Flags));
508 if (check_StatSN(conn, pdu->pdu_hdr.pduh_p.text_rsp.StatSN, TRUE)) {
523 if ((rc = collect_text_data(pdu, req_ccb)) != 0) {
526 negotiate_text(conn, pdu, req_ccb);
538 * pdu The PDU
543 receive_logout_pdu(connection_t *conn, pdu_t *pdu, ccb_t *req_ccb)
550 response = pdu->pdu_hdr.pduh_OpcodeSpecific [0];
558 if (otherconn && check_StatSN(conn, pdu->pdu_hdr.pduh_p.logout_rsp.StatSN, TRUE))
579 refconn->c_Time2Wait = ntohs(pdu->pdu_hdr.pduh_p.logout_rsp.Time2Wait);
580 refconn->c_Time2Retain = ntohs(pdu->pdu_hdr.pduh_p.logout_rsp.Time2Retain);
610 * pdu The PDU
615 receive_data_in_pdu(connection_t *conn, pdu_t *pdu, ccb_t *req_ccb)
621 dsl = ntoh3(pdu->pdu_hdr.pduh_DataSegmentLength);
634 sn = ntohl(pdu->pdu_hdr.pduh_p.data_in.DataSN);
667 if ((pdu->pdu_hdr.pduh_Flags & FLAG_ACK) && conn->c_session->s_ErrorRecoveryLevel)
668 send_snack(conn, pdu, req_ccb, SNACK_DATA_ACK);
672 if (pdu->pdu_hdr.pduh_Flags & FLAG_STATUS) {
682 if (check_StatSN(conn, pdu->pdu_hdr.pduh_p.data_in.StatSN, done))
700 * pdu The PDU
705 receive_r2t_pdu(connection_t *conn, pdu_t *pdu, ccb_t *req_ccb)
715 send_data_out(conn, pdu, req_ccb, CCBDISP_NOWAIT, TRUE);
728 * pdu The PDU
733 receive_command_response_pdu(connection_t *conn, pdu_t *pdu, ccb_t *req_ccb)
740 if (pdu->pdu_temp_data_len && req_ccb != NULL && req_ccb->ccb_sense_len_req) {
742 ntohs(*((uint16_t *) pdu->pdu_temp_data)));
743 memcpy(req_ccb->ccb_sense_ptr, ((uint16_t *) pdu->pdu_temp_data) + 1,
767 if (pdu->pdu_hdr.pduh_OpcodeSpecific[0]) { /* Response */
770 switch (pdu->pdu_hdr.pduh_OpcodeSpecific[1]) { /* Status */
789 if (pdu->pdu_hdr.pduh_Flags & (FLAG_OVERFLOW | FLAG_UNDERFLOW))
790 req_ccb->ccb_residual = ntohl(pdu->pdu_hdr.pduh_p.response.ResidualCount);
796 pdu->pdu_hdr.pduh_OpcodeSpecific[0],
797 pdu->pdu_hdr.pduh_OpcodeSpecific[1]));
799 rc = check_StatSN(conn, pdu->pdu_hdr.pduh_p.response.StatSN, done);
814 * pdu The PDU
818 receive_asynch_pdu(connection_t *conn, pdu_t *pdu)
821 DEBOUT(("Received Asynch PDU, Event %d\n", pdu->pdu_hdr.pduh_p.asynch.AsyncEvent));
823 switch (pdu->pdu_hdr.pduh_p.asynch.AsyncEvent) {
840 ntohs(pdu->pdu_hdr.pduh_p.asynch.Parameter1));
843 ntohs(pdu->pdu_hdr.pduh_p.asynch.Parameter2);
845 ntohs(pdu->pdu_hdr.pduh_p.asynch.Parameter3);
853 ntohs(pdu->pdu_hdr.pduh_p.asynch.Parameter2);
855 ntohs(pdu->pdu_hdr.pduh_p.asynch.Parameter3);
879 * pdu The PDU
883 receive_reject_pdu(connection_t *conn, pdu_t *pdu)
890 pdu->pdu_hdr.pduh_OpcodeSpecific[0], pdu->pdu_temp_data_len));
892 if (pdu->pdu_temp_data_len >= BHS_SIZE) {
893 hpdu = (pdu_header_t *) pdu->pdu_temp_data;
901 switch (pdu->pdu_hdr.pduh_OpcodeSpecific[0]) {
946 * pdu The PDU
951 receive_task_management_pdu(connection_t *conn, pdu_t *pdu, ccb_t *req_ccb)
956 pdu->pdu_hdr.pduh_OpcodeSpecific[0], req_ccb));
959 switch (pdu->pdu_hdr.pduh_OpcodeSpecific[0]) { /* Response */
991 check_StatSN(conn, pdu->pdu_hdr.pduh_p.task_rsp.StatSN, TRUE);
1003 * pdu The PDU
1008 receive_nop_in_pdu(connection_t *conn, pdu_t *pdu, ccb_t *req_ccb)
1012 req_ccb, pdu->pdu_hdr.pduh_InitiatorTaskTag,
1013 pdu->pdu_hdr.pduh_p.nop_in.TargetTransferTag,
1014 ntohl(pdu->pdu_hdr.pduh_p.nop_in.StatSN)));
1016 if (pdu->pdu_hdr.pduh_InitiatorTaskTag == 0xffffffff) {
1018 if (pdu->pdu_hdr.pduh_p.nop_in.TargetTransferTag != 0xffffffff)
1019 send_nop_out(conn, pdu);
1033 check_CmdSN(conn, pdu->pdu_hdr.pduh_p.nop_in.ExpCmdSN);
1037 check_StatSN(conn, pdu->pdu_hdr.pduh_p.nop_in.StatSN, TRUE);
1040 pdu->pdu_hdr.pduh_InitiatorTaskTag));
1053 * pdu The PDU
1059 receive_pdu(connection_t *conn, pdu_t *pdu)
1067 digest = gen_digest(&pdu->pdu_hdr, BHS_SIZE);
1068 if (digest != pdu->pdu_hdr.pduh_HeaderDigest) {
1070 digest, pdu->pdu_hdr.pduh_HeaderDigest));
1073 free_pdu(pdu);
1079 ntohl(pdu->pdu_hdr.pduh_p.response.StatSN),
1080 ntohl(pdu->pdu_hdr.pduh_p.response.ExpCmdSN),
1081 ntohl(pdu->pdu_hdr.pduh_p.response.MaxCmdSN),
1082 ntohl(pdu->pdu_hdr.pduh_p.response.ExpDataSN)));
1084 req_ccb = ccb_from_itt(conn, pdu->pdu_hdr.pduh_InitiatorTaskTag);
1087 (pdu->pdu_hdr.pduh_Opcode & OPCODE_MASK) == TOP_SCSI_Data_in) {
1090 dsl = ntoh3(pdu->pdu_hdr.pduh_DataSegmentLength);
1091 offset = ntohl(pdu->pdu_hdr.pduh_p.data_in.BufferOffset);
1103 rc = read_pdu_data(pdu, req_ccb->ccb_data_ptr, offset);
1105 rc = read_pdu_data(pdu, NULL, 0);
1108 (pdu->pdu_hdr.pduh_Opcode & OPCODE_MASK) == TOP_Logout_Response)) {
1110 switch (pdu->pdu_hdr.pduh_Opcode & OPCODE_MASK) {
1112 rc = receive_nop_in_pdu(conn, pdu, req_ccb);
1116 rc = receive_command_response_pdu(conn, pdu, req_ccb);
1120 rc = receive_task_management_pdu(conn, pdu, req_ccb);
1124 rc = receive_login_pdu(conn, pdu, req_ccb);
1128 rc = receive_text_response_pdu(conn, pdu, req_ccb);
1132 rc = receive_data_in_pdu(conn, pdu, req_ccb);
1136 rc = receive_logout_pdu(conn, pdu, req_ccb);
1140 rc = receive_r2t_pdu(conn, pdu, req_ccb);
1144 rc = receive_asynch_pdu(conn, pdu);
1148 rc = receive_reject_pdu(conn, pdu);
1152 DEBOUT(("Received Invalid Opcode %x\n", pdu->pdu_hdr.pduh_Opcode));
1159 free_pdu(pdu);
1164 ExpCmdSN = ntohl(pdu->pdu_hdr.pduh_p.nop_in.ExpCmdSN);
1165 MaxCmdSN = ntohl(pdu->pdu_hdr.pduh_p.nop_in.MaxCmdSN);
1169 if ((pdu->pdu_hdr.pduh_Opcode & OPCODE_MASK) == TOP_NOP_In &&
1202 pdu_t *pdu;
1207 pdu = get_pdu(conn, TRUE);
1208 if (pdu == NULL) {
1213 pdu->pdu_uio.uio_iov = pdu->pdu_io_vec;
1214 UIO_SETUP_SYSSPACE(&pdu->pdu_uio);
1215 pdu->pdu_uio.uio_iovcnt = 1;
1216 pdu->pdu_uio.uio_rw = UIO_READ;
1218 pdu->pdu_io_vec[0].iov_base = &pdu->pdu_hdr;
1220 pdu->pdu_io_vec[0].iov_len = hlen;
1221 pdu->pdu_uio.uio_resid = hlen;
1224 if (my_soo_read(conn, &pdu->pdu_uio, MSG_WAITALL)) {
1225 free_pdu(pdu);
1231 pdu->pdu_uio.uio_iov = pdu->pdu_io_vec;
1232 pdu->pdu_uio.uio_iovcnt = 1;
1233 pdu->pdu_io_vec[0].iov_base = &pdu->pdu_hdr.pduh_HeaderDigest;
1234 pdu->pdu_io_vec[0].iov_len = 4;
1235 pdu->pdu_uio.uio_resid = 4;
1236 if (my_soo_read(conn, &pdu->pdu_uio, MSG_WAITALL)) {
1237 free_pdu(pdu);
1242 if (receive_pdu(conn, pdu) > 0) {