212
213
conn->saddr = addr;
213
/* update session's rec */
214
memset(session->nrec.conn[0].address, 0, NI_MAXHOST);
215
memcpy(session->nrec.conn[0].address, address, strlen(address));
216
session->nrec.conn[0].port = atoi(port);
218
session->nrec.tpgt = atoi(tag);
215
session->portal_group_tag = atoi(tag);
382
379
text = value_end;
383
380
} else if (iscsi_find_key_value("MaxRecvDataSegmentLength", text, end,
384
381
&value, &value_end)) {
385
conn->max_xmit_dlength = strtoul(value, NULL, 0);
382
if (session->type == ISCSI_SESSION_TYPE_DISCOVERY ||
383
!session->provider->utransport->rdma)
384
conn->max_xmit_dlength = strtoul(value, NULL, 0);
386
385
text = value_end;
387
386
} else if (iscsi_find_key_value("FirstBurstLength", text, end, &value,
539
538
text = value_end;
540
539
} else if (iscsi_find_key_value("RDMAExtensions", text, end,
541
540
&value, &value_end)) {
542
if (session->provider->rdma) {
543
if (strcmp(value, "Yes") == 0)
544
session->rdma_ext = RDMA_EXT_YES;
546
session->rdma_ext = RDMA_EXT_NO;
547
} else if (strcmp(value, "Yes") == 0) {
541
if (session->provider->utransport->rdma &&
542
strcmp(value, "Yes") != 0) {
548
543
log_error("Login negotiation failed, "
549
"can't support RDMAExtensions");
544
"Target must support RDMAExtensions");
550
545
return LOGIN_NEGOTIATION_FAILED;
552
547
text = value_end;
553
548
} else if (iscsi_find_key_value("InitiatorRecvDataSegmentLength", text,
554
549
end, &value, &value_end)) {
555
if (session->provider->rdma) {
556
if (conn->max_recv_dlength != strtoul(value, NULL, 0)) {
557
log_error("Login negotiation failed, "
558
"InitiatorRecvDataSegmentLength wasn't "
559
"accepted by the target");
560
return LOGIN_NEGOTIATION_FAILED;
550
if (session->provider->utransport->rdma) {
551
conn->max_recv_dlength = MIN(conn->max_recv_dlength,
552
strtoul(value, NULL, 0));
563
554
text = value_end;
564
555
} else if (iscsi_find_key_value("TargetRecvDataSegmentLength", text,
565
556
end, &value, &value_end)) {
566
if (session->provider->rdma)
567
conn->max_xmit_dlength = strtoul(value, NULL, 0);
557
if (session->provider->utransport->rdma) {
558
conn->max_xmit_dlength = MIN(conn->max_xmit_dlength,
559
strtoul(value, NULL, 0));
568
561
text = value_end;
569
562
} else if (iscsi_find_key_value ("X-com.cisco.protocol", text, end,
570
563
&value, &value_end)) {
820
813
char value[AUTH_STR_MAX_LEN];
821
814
iscsi_conn_t *conn = &session->conn[cid];
823
if (!session->provider->rdma) {
816
if (session->type == ISCSI_SESSION_TYPE_DISCOVERY ||
817
!session->provider->utransport->rdma) {
824
818
sprintf(value, "%d", conn->max_recv_dlength);
825
819
if (!iscsi_add_text(pdu, data, max_data_length,
826
820
"MaxRecvDataSegmentLength", value))
828
session->rdma_ext = RDMA_EXT_NO;
830
823
sprintf(value, "%d", conn->max_recv_dlength);
831
824
if (!iscsi_add_text(pdu, data, max_data_length,
832
825
"InitiatorRecvDataSegmentLength",
829
sprintf(value, "%d", conn->max_xmit_dlength);
830
if (!iscsi_add_text(pdu, data, max_data_length,
831
"TargetRecvDataSegmentLength",
835
835
if (!iscsi_add_text(pdu, data, max_data_length,
836
836
"RDMAExtensions", "Yes"))
960
960
rdma = (session->type == ISCSI_SESSION_TYPE_NORMAL) &&
961
session->provider->rdma;
963
/* For RDMA transport stage switched after RDMAExtensions negotiated */
964
if (rdma && session->rdma_ext != RDMA_EXT_NOT_NEGOTIATED)
961
session->provider->utransport->rdma;
968
964
* If we haven't gotten a partial response, then either we shouldn't be