summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Vater2025-08-26 16:49:09 +0200
committerSebastian Vater2025-08-26 16:49:09 +0200
commit070b3f5827fcad27474e6d3476ec068ffb9b64eb (patch)
tree48a8790425410e1d70eaf266e058ae4e9a633d1b
parentiSCSI Code refactoring and simplification. Finally, removed obselete iSCSI PD... (diff)
downloaddnbd3-070b3f5827fcad27474e6d3476ec068ffb9b64eb.tar.gz
dnbd3-070b3f5827fcad27474e6d3476ec068ffb9b64eb.tar.xz
dnbd3-070b3f5827fcad27474e6d3476ec068ffb9b64eb.zip
Added iSCSI opcode immediate flag to header file to make code more readable and removed some obselete spaces.
-rw-r--r--src/server/iscsi.c22
-rw-r--r--src/server/iscsi.h5
2 files changed, 15 insertions, 12 deletions
diff --git a/src/server/iscsi.c b/src/server/iscsi.c
index 8f51162..73be352 100644
--- a/src/server/iscsi.c
+++ b/src/server/iscsi.c
@@ -1700,7 +1700,7 @@ int iscsi_validate_packet(const struct iscsi_bhs_packet *packet_data, const uint
break;
}
case ISCSI_OPCODE_CLIENT_LOGIN_REQ : {
- if ( (packet_data->opcode != (opcode | 0x40)) || (ahs_len != 0) )
+ if ( (packet_data->opcode != (opcode | ISCSI_OPCODE_FLAGS_IMMEDIATE)) || (ahs_len != 0) )
return ISCSI_VALIDATE_PACKET_RESULT_ERROR_PROTOCOL_SPECS; // Bit 6 always MUST be set and AHS MUST be zero according to specs -> invalid iSCSI packet data
const iscsi_login_req_packet *login_req_pkt = (const iscsi_login_req_packet *) packet_data;
@@ -4989,7 +4989,7 @@ static int iscsi_connection_login_check_target(iscsi_connection *conn, iscsi_pdu
if ( redirect_adr != NULL ) {
iscsi_key_value_pair *key_value_pair;
- const int rc = iscsi_hashmap_get( iscsi_globvec->session_key_value_pairs, ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ADDRESS, strlen( (char *) ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ADDRESS ) + 1, (uint8_t **) &key_value_pair);
+ const int rc = iscsi_hashmap_get( iscsi_globvec->session_key_value_pairs, ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ADDRESS, strlen( (char *) ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ADDRESS ) + 1, (uint8_t **) &key_value_pair);
if ( rc < 0 ) {
login_response_pkt->status_class = ISCSI_LOGIN_RESPONSE_STATUS_CLASS_SERVER_ERR;
@@ -5471,7 +5471,7 @@ static int iscsi_connection_update_cmd_sn(iscsi_connection *conn, iscsi_pdu *pdu
pdu->cmd_sn = iscsi_get_be32(scsi_cmd_pkt->cmd_sn);
if ( session->err_recovery_level == 0 ) {
- if ( (scsi_cmd_pkt->opcode & 0x40) == 0 ) {
+ if ( (scsi_cmd_pkt->opcode & ISCSI_OPCODE_FLAGS_IMMEDIATE) == 0 ) {
if ( (iscsi_seq_num_cmp_lt( pdu->cmd_sn, session->exp_cmd_sn ) || iscsi_seq_num_cmp_gt( pdu->cmd_sn, session->max_cmd_sn )) && ((session->type == ISCSI_SESSION_TYPE_NORMAL) && (opcode != ISCSI_OPCODE_CLIENT_SCSI_DATA_OUT)) )
return ISCSI_CONNECT_PDU_READ_ERR_FATAL;
} else if ( (pdu->cmd_sn != session->exp_cmd_sn) && (opcode != ISCSI_OPCODE_CLIENT_NOP_OUT) )
@@ -5486,7 +5486,7 @@ static int iscsi_connection_update_cmd_sn(iscsi_connection *conn, iscsi_pdu *pdu
if ( session->err_recovery_level > 0 )
iscsi_connection_pdu_ack_remove( conn, exp_stat_sn );
- if ( ((scsi_cmd_pkt->opcode & 0x40) == 0) && (opcode != ISCSI_OPCODE_CLIENT_NOP_OUT) )
+ if ( ((scsi_cmd_pkt->opcode & ISCSI_OPCODE_FLAGS_IMMEDIATE) == 0) && (opcode != ISCSI_OPCODE_CLIENT_NOP_OUT) )
session->exp_cmd_sn++;
return ISCSI_CONNECT_PDU_READ_OK;
@@ -5567,7 +5567,7 @@ static int iscsi_connection_pdu_header_handle_nop_out(iscsi_connection *conn, is
if ( (target_xfer_tag != 0xFFFFFFFFUL) && (target_xfer_tag != (uint32_t) conn->id) )
return iscsi_connection_handle_reject( conn, pdu, ISCSI_REJECT_REASON_INVALID_PDU_FIELD ); // TODO: Check if this is the correct error code.
- if ( (init_task_tag == 0xFFFFFFFFUL) && (nop_out_pkt->opcode & 0x40) == 0 )
+ if ( (init_task_tag == 0xFFFFFFFFUL) && (nop_out_pkt->opcode & ISCSI_OPCODE_FLAGS_IMMEDIATE) == 0 )
return ISCSI_CONNECT_PDU_READ_ERR_FATAL;
return 0L;
@@ -5645,7 +5645,7 @@ static int iscsi_connection_pdu_header_handle_text_req(iscsi_connection *conn, i
if ( exp_stat_sn != conn->stat_sn )
conn->stat_sn = exp_stat_sn;
- if ( (text_req_pkt->opcode & (0x40 | -0x80)) == (0x40 | -0x80) )
+ if ( (text_req_pkt->flags & (ISCSI_TEXT_REQ_FLAGS_CONTINUE | ISCSI_TEXT_REQ_FLAGS_FINAL)) == (ISCSI_TEXT_REQ_FLAGS_CONTINUE | ISCSI_TEXT_REQ_FLAGS_FINAL) )
return ISCSI_CONNECT_PDU_READ_ERR_FATAL;
if ( conn->session->current_text_init_task_tag == 0xFFFFFFFFUL )
@@ -6219,7 +6219,7 @@ static int iscsi_connection_pdu_data_handle_nop_out(iscsi_connection *conn, iscs
iscsi_put_be32( (uint8_t *) &nop_in_pkt->init_task_tag, init_task_tag );
iscsi_put_be32( (uint8_t *) &nop_in_pkt->stat_sn, conn->stat_sn++ );
- if ( (nop_out_pkt->opcode & 0x40) == 0 )
+ if ( (nop_out_pkt->opcode & ISCSI_OPCODE_FLAGS_IMMEDIATE) == 0 )
conn->session->max_cmd_sn++;
iscsi_put_be32( (uint8_t *) &nop_in_pkt->exp_cmd_sn, conn->session->exp_cmd_sn );
@@ -6544,7 +6544,7 @@ static int iscsi_connection_login_set_target_info(iscsi_connection *conn, iscsi_
if ( (rc == 0) && (strlen( (char *) tmp_buf ) != 0) ) {
iscsi_key_value_pair *key_value_pair;
- rc = iscsi_hashmap_get( iscsi_globvec->session_key_value_pairs, ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ALIAS, strlen( (char *) ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ALIAS ) + 1, (uint8_t **) &key_value_pair);
+ rc = iscsi_hashmap_get( iscsi_globvec->session_key_value_pairs, ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ALIAS, strlen( (char *) ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ALIAS ) + 1, (uint8_t **) &key_value_pair);
if ( rc < 0 )
return ISCSI_CONNECT_PDU_READ_ERR_FATAL;
@@ -6562,7 +6562,7 @@ static int iscsi_connection_login_set_target_info(iscsi_connection *conn, iscsi_
if ( (rc == 0) && (strlen( (char *) tmp_buf ) != 0) ) {
iscsi_key_value_pair *key_value_pair;
- rc = iscsi_hashmap_get( iscsi_globvec->session_key_value_pairs, ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ADDRESS, strlen( (char *) ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ADDRESS ) + 1, (uint8_t **) &key_value_pair);
+ rc = iscsi_hashmap_get( iscsi_globvec->session_key_value_pairs, ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ADDRESS, strlen( (char *) ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_ADDRESS ) + 1, (uint8_t **) &key_value_pair);
if ( rc < 0 )
return ISCSI_CONNECT_PDU_READ_ERR_FATAL;
@@ -6580,7 +6580,7 @@ static int iscsi_connection_login_set_target_info(iscsi_connection *conn, iscsi_
if ( rc == 0 ) {
iscsi_key_value_pair *key_value_pair;
- rc = iscsi_hashmap_get( iscsi_globvec->session_key_value_pairs, ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_PORTAL_GROUP_TAG, strlen( (char *) ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_PORTAL_GROUP_TAG ) + 1, (uint8_t **) &key_value_pair);
+ rc = iscsi_hashmap_get( iscsi_globvec->session_key_value_pairs, ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_PORTAL_GROUP_TAG, strlen( (char *) ISCSI_LOGIN_AUTH_SECURITY_TEXT_KEY_TARGET_PORTAL_GROUP_TAG ) + 1, (uint8_t **) &key_value_pair);
if ( rc < 0 )
return ISCSI_CONNECT_PDU_READ_ERR_FATAL;
@@ -7137,7 +7137,7 @@ static int iscsi_connection_pdu_data_handle_text_req(iscsi_connection *conn, isc
iscsi_put_be32( (uint8_t *) &text_response_pkt->stat_sn, conn->stat_sn++ );
- if ( (text_response_pkt->opcode & 0x40) == 0 )
+ if ( (text_response_pkt->opcode & ISCSI_OPCODE_FLAGS_IMMEDIATE) == 0 )
conn->session->max_cmd_sn++;
iscsi_put_be32( (uint8_t *) &text_response_pkt->exp_cmd_sn, conn->session->exp_cmd_sn );
diff --git a/src/server/iscsi.h b/src/server/iscsi.h
index f944146..67c1655 100644
--- a/src/server/iscsi.h
+++ b/src/server/iscsi.h
@@ -390,9 +390,12 @@ int iscsi_hashmap_iterate(iscsi_hashmap *map, iscsi_hashmap_callback callback, u
/// iSCSI opcode bit mask (bits 0-5 used).
#define ISCSI_OPCODE_MASK 0x3F
-/// Macro which extracts iSCSI packet data opcode out of opcode byte
+/// Macro which extracts iSCSI packet data opcode out of opcode byte.
#define ISCSI_GET_OPCODE(x) ((x) & ISCSI_OPCODE_MASK)
+/// iSCSI opcode flags (I) Immediate bit: For Request PDUs, the I bit set to 1 is an immediate delivery marker.
+#define ISCSI_OPCODE_FLAGS_IMMEDIATE (1 << 6L)
+
/**
* @brief iSCSI Basic Header Segment packet data.