aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/iscsid
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2020-10-22 20:26:27 +0000
committerAlexander Motin <mav@FreeBSD.org>2020-10-22 20:26:27 +0000
commit7dbbd1aeaed98e379ee3b1589f659831dd39709c (patch)
tree774931bcfe075b393c48ec471d5d0a93cdaf0cf6 /usr.sbin/iscsid
parent174f809da51057394107af98266a690dc4d9cc9d (diff)
Notes
Diffstat (limited to 'usr.sbin/iscsid')
-rw-r--r--usr.sbin/iscsid/iscsid.c2
-rw-r--r--usr.sbin/iscsid/iscsid.h1
-rw-r--r--usr.sbin/iscsid/login.c6
3 files changed, 9 insertions, 0 deletions
diff --git a/usr.sbin/iscsid/iscsid.c b/usr.sbin/iscsid/iscsid.c
index 5d121e83b158..92c3cddba57f 100644
--- a/usr.sbin/iscsid/iscsid.c
+++ b/usr.sbin/iscsid/iscsid.c
@@ -172,6 +172,7 @@ connection_new(int iscsi_fd, const struct iscsi_daemon_request *request)
/*
* Default values, from RFC 3720, section 12.
*/
+ conn->conn_protocol_level = 0;
conn->conn_header_digest = CONN_DIGEST_NONE;
conn->conn_data_digest = CONN_DIGEST_NONE;
conn->conn_initial_r2t = true;
@@ -329,6 +330,7 @@ handoff(struct connection *conn)
sizeof(idh.idh_target_alias));
idh.idh_tsih = conn->conn_tsih;
idh.idh_statsn = conn->conn_statsn;
+ idh.idh_protocol_level = conn->conn_protocol_level;
idh.idh_header_digest = conn->conn_header_digest;
idh.idh_data_digest = conn->conn_data_digest;
idh.idh_initial_r2t = conn->conn_initial_r2t;
diff --git a/usr.sbin/iscsid/iscsid.h b/usr.sbin/iscsid/iscsid.h
index e1a5e92113d2..93d741782520 100644
--- a/usr.sbin/iscsid/iscsid.h
+++ b/usr.sbin/iscsid/iscsid.h
@@ -57,6 +57,7 @@ struct connection {
uint8_t conn_isid[6];
uint16_t conn_tsih;
uint32_t conn_statsn;
+ int conn_protocol_level;
int conn_header_digest;
int conn_data_digest;
bool conn_initial_r2t;
diff --git a/usr.sbin/iscsid/login.c b/usr.sbin/iscsid/login.c
index 112c97e48975..cfb370bba28d 100644
--- a/usr.sbin/iscsid/login.c
+++ b/usr.sbin/iscsid/login.c
@@ -341,6 +341,11 @@ login_negotiate_key(struct connection *conn, const char *name,
sizeof(conn->conn_target_alias));
} else if (strcmp(value, "Irrelevant") == 0) {
/* Ignore. */
+ } else if (strcmp(name, "iSCSIProtocolLevel") == 0) {
+ tmp = strtoul(value, NULL, 10);
+ if (tmp < 0 || tmp > 31)
+ log_errx(1, "received invalid iSCSIProtocolLevel");
+ conn->conn_protocol_level = tmp;
} else if (strcmp(name, "HeaderDigest") == 0) {
which = login_list_prefers(value, "CRC32C", "None");
switch (which) {
@@ -500,6 +505,7 @@ login_negotiate(struct connection *conn)
* The following keys are irrelevant for discovery sessions.
*/
if (conn->conn_conf.isc_discovery == 0) {
+ keys_add(request_keys, "iSCSIProtocolLevel", "2");
if (conn->conn_conf.isc_header_digest != 0)
keys_add(request_keys, "HeaderDigest", "CRC32C");
else