void log_pdu(struct pdu *p, int all) { struct iscsi_pdu *pdu; void *b; size_t s; if (!debug) return; if (!(pdu = pdu_getbuf(p, NULL, PDU_HEADER))) { log_debug("empty pdu"); return; } fprintf(stderr, "PDU: op %x%s flags %02x%02x%02x ahs %d len %d\n", ISCSI_PDU_OPCODE(pdu->opcode), ISCSI_PDU_I(pdu) ? " I" : "", pdu->flags, pdu->_reserved1[0], pdu->_reserved1[1], pdu->ahslen, pdu->datalen[0] << 16 | pdu->datalen[1] << 8 | pdu->datalen[2]); fprintf(stderr, " lun %02x%02x%02x%02x%02x%02x%02x%02x itt %u " "cmdsn %u expstatsn %u\n", pdu->lun[0], pdu->lun[1], pdu->lun[2], pdu->lun[3], pdu->lun[4], pdu->lun[5], pdu->lun[6], pdu->lun[7], ntohl(pdu->itt), ntohl(pdu->cmdsn), ntohl(pdu->expstatsn)); log_hexdump(pdu, sizeof(*pdu)); if (all && (b = pdu_getbuf(p, &s, PDU_DATA))) log_hexdump(b, s); }
void conn_pdu_write(struct connection *c, struct pdu *p) { struct iscsi_pdu *ipdu; /* XXX I GUESS THIS SHOULD BE MOVED TO PDU SOMEHOW... */ ipdu = pdu_getbuf(p, NULL, PDU_HEADER); switch (ISCSI_PDU_OPCODE(ipdu->opcode)) { case ISCSI_OP_I_NOP: case ISCSI_OP_SCSI_REQUEST: case ISCSI_OP_TASK_REQUEST: case ISCSI_OP_LOGIN_REQUEST: case ISCSI_OP_TEXT_REQUEST: case ISCSI_OP_DATA_OUT: case ISCSI_OP_LOGOUT_REQUEST: case ISCSI_OP_SNACK_REQUEST: ipdu->expstatsn = ntohl(c->expstatsn); break; } TAILQ_INSERT_TAIL(&c->pdu_w, p, entry); event_add(&c->wev, NULL); }