int iscsi_pdu_add_data(struct iscsi_context *iscsi, struct iscsi_pdu *pdu, unsigned char *dptr, int dsize) { if (pdu == NULL) { iscsi_set_error(iscsi, "trying to add data to NULL pdu"); return -1; } if (dsize == 0) { iscsi_set_error(iscsi, "Trying to append zero size data to " "pdu"); return -1; } if (iscsi_add_data(iscsi, &pdu->outdata, dptr, dsize, 1) != 0) { iscsi_set_error(iscsi, "failed to add data to pdu buffer"); return -1; } /* update data segment length */ scsi_set_uint32(&pdu->outdata.data[4], pdu->outdata.size - ISCSI_HEADER_SIZE); return 0; }
static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) { switch (change_cmdsn) { case 1: /* change the cmdsn so it becomes too big */ scsi_set_uint32(&pdu->outdata.data[24], iscsi->maxcmdsn + 1); break; case 2: /* change the cmdsn so it becomes too small */ scsi_set_uint32(&pdu->outdata.data[24], 0); break; } change_cmdsn = 0; return 0; }
static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) { switch (change_cmdsn) { case 1: /* change the cmdsn so it becomes too big */ scsi_set_uint32(&pdu->outdata.data[24], iscsi->expcmdsn - 1); /* fudge the cmdsn value back to where it should be if this * pdu is ignored. */ iscsi->cmdsn = iscsi->expcmdsn; break; } change_cmdsn = 0; return 0; }
void iscsi_pdu_set_bufferoffset(struct iscsi_pdu *pdu, uint32_t bufferoffset) { scsi_set_uint32(&pdu->outdata.data[40], bufferoffset); }
void iscsi_pdu_set_expstatsn(struct iscsi_pdu *pdu, uint32_t expstatsnsn) { scsi_set_uint32(&pdu->outdata.data[28], expstatsnsn); }
void iscsi_pdu_set_datasn(struct iscsi_pdu *pdu, uint32_t datasn) { scsi_set_uint32(&pdu->outdata.data[36], datasn); }
void iscsi_pdu_set_rcmdsn(struct iscsi_pdu *pdu, uint32_t rcmdsn) { scsi_set_uint32(&pdu->outdata.data[32], rcmdsn); }
void iscsi_pdu_set_cmdsn(struct iscsi_pdu *pdu, uint32_t cmdsn) { scsi_set_uint32(&pdu->outdata.data[24], cmdsn); }
void iscsi_pdu_set_ttt(struct iscsi_pdu *pdu, uint32_t ttt) { scsi_set_uint32(&pdu->outdata.data[20], ttt); }
void iscsi_pdu_set_itt(struct iscsi_pdu *pdu, uint32_t itt) { scsi_set_uint32(&pdu->outdata.data[16], itt); }