|
@@ -395,8 +395,8 @@ static int iscsi_build_login_request_strings ( struct iscsi_session *iscsi,
|
395
|
395
|
"TargetName=%s%c"
|
396
|
396
|
"SessionType=Normal%c"
|
397
|
397
|
"AuthMethod=CHAP,None%c",
|
398
|
|
- iscsi->initiator, 0, iscsi->target, 0,
|
399
|
|
- 0, 0 );
|
|
398
|
+ iscsi->initiator_iqn, 0,
|
|
399
|
+ iscsi->target_iqn, 0, 0, 0 );
|
400
|
400
|
}
|
401
|
401
|
|
402
|
402
|
if ( iscsi->status & ISCSI_STATUS_STRINGS_CHAP_ALGORITHM ) {
|
|
@@ -497,7 +497,7 @@ static void iscsi_tx_login_request ( struct iscsi_session *iscsi,
|
497
|
497
|
static void iscsi_handle_targetaddress_value ( struct iscsi_session *iscsi,
|
498
|
498
|
const char *value ) {
|
499
|
499
|
struct in_addr address;
|
500
|
|
- struct sockaddr_in *sin = ( struct sockaddr_in * ) &iscsi->tcp.peer;
|
|
500
|
+ struct sockaddr_in *sin = ( struct sockaddr_in * ) &iscsi->target;
|
501
|
501
|
|
502
|
502
|
if ( inet_aton ( value, &address ) == 0 ) {
|
503
|
503
|
DBG ( "iSCSI %p received invalid TargetAddress \"%s\"\n",
|
|
@@ -1121,6 +1121,9 @@ static void iscsi_closed ( struct tcp_connection *conn, int status ) {
|
1121
|
1121
|
/* Retry connection if within the retry limit, otherwise fail */
|
1122
|
1122
|
if ( ++iscsi->retry_count <= ISCSI_MAX_RETRIES ) {
|
1123
|
1123
|
DBG ( "iSCSI %p retrying connection\n", iscsi );
|
|
1124
|
+ /* Re-copy address to handle redirection */
|
|
1125
|
+ memcpy ( &iscsi->tcp.peer, &iscsi->target,
|
|
1126
|
+ sizeof ( iscsi->tcp.peer ) );
|
1124
|
1127
|
tcp_connect ( conn );
|
1125
|
1128
|
} else {
|
1126
|
1129
|
printf ( "iSCSI %p retry count exceeded\n", iscsi );
|
|
@@ -1190,6 +1193,8 @@ struct async_operation * iscsi_issue ( struct iscsi_session *iscsi,
|
1190
|
1193
|
} else {
|
1191
|
1194
|
/* Session not open: initiate login */
|
1192
|
1195
|
iscsi->tcp.tcp_op = &iscsi_tcp_operations;
|
|
1196
|
+ memcpy ( &iscsi->tcp.peer, &iscsi->target,
|
|
1197
|
+ sizeof ( iscsi->tcp.peer ) );
|
1193
|
1198
|
tcp_connect ( &iscsi->tcp );
|
1194
|
1199
|
}
|
1195
|
1200
|
|