Пример #1
0
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);
}
Пример #2
0
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);
}