From 070b3f5827fcad27474e6d3476ec068ffb9b64eb Mon Sep 17 00:00:00 2001 From: Sebastian Vater Date: Tue, 26 Aug 2025 16:49:09 +0200 Subject: Added iSCSI opcode immediate flag to header file to make code more readable and removed some obselete spaces. --- src/server/iscsi.c | 22 +++++++++++----------- src/server/iscsi.h | 5 ++++- 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. -- cgit v1.2.3-55-g7522