aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/iscsid
diff options
context:
space:
mode:
authorEdward Tomasz Napierala <trasz@FreeBSD.org>2016-05-17 07:54:53 +0000
committerEdward Tomasz Napierala <trasz@FreeBSD.org>2016-05-17 07:54:53 +0000
commit5abae79af48360f701a4b36a0562dcf18662db15 (patch)
treeeb9d8ca6f1e3b672ad13275da031e9c11e159e5f /usr.sbin/iscsid
parent2685841b38d11156ab2f58b09513f9c04fa10233 (diff)
Notes
Diffstat (limited to 'usr.sbin/iscsid')
-rw-r--r--usr.sbin/iscsid/login.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/usr.sbin/iscsid/login.c b/usr.sbin/iscsid/login.c
index ed0b9bf20914..6abb9d6db251 100644
--- a/usr.sbin/iscsid/login.c
+++ b/usr.sbin/iscsid/login.c
@@ -422,8 +422,38 @@ login_negotiate_key(struct connection *conn, const char *name,
/* Ignore */
} else if (strcmp(name, "IFMarker") == 0) {
/* Ignore */
+ } else if (strcmp(name, "RDMAExtensions") == 0) {
+ if (conn->conn_conf.isc_iser == 1 &&
+ strcmp(value, "Yes") != 0) {
+ log_errx(1, "received unsupported RDMAExtensions");
+ }
+ } else if (strcmp(name, "InitiatorRecvDataSegmentLength") == 0) {
+ tmp = strtoul(value, NULL, 10);
+ if (tmp <= 0)
+ log_errx(1, "received invalid "
+ "InitiatorRecvDataSegmentLength");
+ if ((size_t)tmp > conn->conn_limits.isl_max_data_segment_length) {
+ log_debugx("capping InitiatorRecvDataSegmentLength "
+ "from %d to %zd", tmp,
+ conn->conn_limits.isl_max_data_segment_length);
+ tmp = conn->conn_limits.isl_max_data_segment_length;
+ }
+ conn->conn_max_data_segment_length = tmp;
} else if (strcmp(name, "TargetPortalGroupTag") == 0) {
/* Ignore */
+ } else if (strcmp(name, "TargetRecvDataSegmentLength") == 0) {
+ tmp = strtoul(value, NULL, 10);
+ if (tmp <= 0) {
+ log_errx(1,
+ "received invalid TargetRecvDataSegmentLength");
+ }
+ if ((size_t)tmp > conn->conn_limits.isl_max_data_segment_length) {
+ log_debugx("capping TargetRecvDataSegmentLength "
+ "from %d to %zd", tmp,
+ conn->conn_limits.isl_max_data_segment_length);
+ tmp = conn->conn_limits.isl_max_data_segment_length;
+ }
+ conn->conn_max_data_segment_length = tmp;
} else {
log_debugx("unknown key \"%s\"; ignoring", name);
}
@@ -465,13 +495,23 @@ login_negotiate(struct connection *conn)
conn->conn_limits.isl_max_data_segment_length);
keys_add(request_keys, "InitialR2T", "Yes");
keys_add(request_keys, "MaxOutstandingR2T", "1");
+ if (conn->conn_conf.isc_iser == 1) {
+ keys_add_int(request_keys, "InitiatorRecvDataSegmentLength",
+ conn->conn_limits.isl_max_data_segment_length);
+ keys_add_int(request_keys, "TargetRecvDataSegmentLength",
+ conn->conn_limits.isl_max_data_segment_length);
+ keys_add(request_keys, "RDMAExtensions", "Yes");
+ } else {
+ keys_add_int(request_keys, "MaxRecvDataSegmentLength",
+ conn->conn_limits.isl_max_data_segment_length);
+ }
} else {
keys_add(request_keys, "HeaderDigest", "None");
keys_add(request_keys, "DataDigest", "None");
+ keys_add_int(request_keys, "MaxRecvDataSegmentLength",
+ conn->conn_limits.isl_max_data_segment_length);
}
- keys_add_int(request_keys, "MaxRecvDataSegmentLength",
- conn->conn_limits.isl_max_data_segment_length);
keys_add(request_keys, "DefaultTime2Wait", "0");
keys_add(request_keys, "DefaultTime2Retain", "0");
keys_add(request_keys, "ErrorRecoveryLevel", "0");