From owner-svn-src-all@freebsd.org Sat Nov 21 00:41:01 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E9813471F25; Sat, 21 Nov 2020 00:41:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4CdF2j5JtCz4pYF; Sat, 21 Nov 2020 00:41:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9F4FE1F137; Sat, 21 Nov 2020 00:41:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0AL0f1fY079448; Sat, 21 Nov 2020 00:41:01 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0AL0f0tX079441; Sat, 21 Nov 2020 00:41:00 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202011210041.0AL0f0tX079441@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sat, 21 Nov 2020 00:41:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r367914 - in stable/12: sys/dev/iscsi usr.sbin/iscsid X-SVN-Group: stable-12 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: in stable/12: sys/dev/iscsi usr.sbin/iscsid X-SVN-Commit-Revision: 367914 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 21 Nov 2020 00:41:02 -0000 Author: mav Date: Sat Nov 21 00:40:59 2020 New Revision: 367914 URL: https://svnweb.freebsd.org/changeset/base/367914 Log: MFC r366953: Negotiate iSCSIProtocolLevel of 2 (RFC 7144) in initiator. It does not change anything immediately, but allows further support of Command Priority, Status Qualifier and new task management functions. Modified: stable/12/sys/dev/iscsi/iscsi.c stable/12/sys/dev/iscsi/iscsi.h stable/12/sys/dev/iscsi/iscsi_ioctl.h stable/12/sys/dev/iscsi/iscsi_proto.h stable/12/usr.sbin/iscsid/iscsid.c stable/12/usr.sbin/iscsid/iscsid.h stable/12/usr.sbin/iscsid/login.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/iscsi/iscsi.c ============================================================================== --- stable/12/sys/dev/iscsi/iscsi.c Fri Nov 20 22:29:38 2020 (r367913) +++ stable/12/sys/dev/iscsi/iscsi.c Sat Nov 21 00:40:59 2020 (r367914) @@ -1426,6 +1426,7 @@ iscsi_ioctl_daemon_handoff(struct iscsi_softc *sc, sizeof(is->is_target_alias)); is->is_tsih = handoff->idh_tsih; is->is_statsn = handoff->idh_statsn; + is->is_protocol_level = handoff->idh_protocol_level; is->is_initial_r2t = handoff->idh_initial_r2t; is->is_immediate_data = handoff->idh_immediate_data; Modified: stable/12/sys/dev/iscsi/iscsi.h ============================================================================== --- stable/12/sys/dev/iscsi/iscsi.h Fri Nov 20 22:29:38 2020 (r367913) +++ stable/12/sys/dev/iscsi/iscsi.h Sat Nov 21 00:40:59 2020 (r367914) @@ -61,8 +61,7 @@ struct iscsi_session { uint32_t is_expcmdsn; uint32_t is_maxcmdsn; uint32_t is_initiator_task_tag; - int is_header_digest; - int is_data_digest; + int is_protocol_level; int is_initial_r2t; int is_max_burst_length; int is_first_burst_length; Modified: stable/12/sys/dev/iscsi/iscsi_ioctl.h ============================================================================== --- stable/12/sys/dev/iscsi/iscsi_ioctl.h Fri Nov 20 22:29:38 2020 (r367913) +++ stable/12/sys/dev/iscsi/iscsi_ioctl.h Sat Nov 21 00:40:59 2020 (r367914) @@ -124,7 +124,8 @@ struct iscsi_daemon_handoff { unsigned int idh_session_id; int idh_socket; char idh_target_alias[ISCSI_ALIAS_LEN]; - uint8_t idh_spare_isid[6]; + int idh_protocol_level; + uint16_t idh_spare; uint16_t idh_tsih; uint16_t idh_spare_cid; uint32_t idh_statsn; Modified: stable/12/sys/dev/iscsi/iscsi_proto.h ============================================================================== --- stable/12/sys/dev/iscsi/iscsi_proto.h Fri Nov 20 22:29:38 2020 (r367913) +++ stable/12/sys/dev/iscsi/iscsi_proto.h Sat Nov 21 00:40:59 2020 (r367914) @@ -90,10 +90,14 @@ CTASSERT(sizeof(struct iscsi_bhs) == ISCSI_BHS_SIZE); #define BHSSC_FLAGS_ATTR_HOQ 3 #define BHSSC_FLAGS_ATTR_ACA 4 +#define BHSSC_PRI_MASK 0xf0 +#define BHSSC_PRI_SHIFT 4 + struct iscsi_bhs_scsi_command { uint8_t bhssc_opcode; uint8_t bhssc_flags; - uint8_t bhssc_reserved[2]; + uint8_t bhssc_pri; + uint8_t bhssc_reserved; uint8_t bhssc_total_ahs_len; uint8_t bhssc_data_segment_len[3]; uint64_t bhssc_lun; Modified: stable/12/usr.sbin/iscsid/iscsid.c ============================================================================== --- stable/12/usr.sbin/iscsid/iscsid.c Fri Nov 20 22:29:38 2020 (r367913) +++ stable/12/usr.sbin/iscsid/iscsid.c Sat Nov 21 00:40:59 2020 (r367914) @@ -171,6 +171,7 @@ connection_new(int iscsi_fd, const struct iscsi_daemon /* * 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; @@ -328,6 +329,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; Modified: stable/12/usr.sbin/iscsid/iscsid.h ============================================================================== --- stable/12/usr.sbin/iscsid/iscsid.h Fri Nov 20 22:29:38 2020 (r367913) +++ stable/12/usr.sbin/iscsid/iscsid.h Sat Nov 21 00:40:59 2020 (r367914) @@ -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; Modified: stable/12/usr.sbin/iscsid/login.c ============================================================================== --- stable/12/usr.sbin/iscsid/login.c Fri Nov 20 22:29:38 2020 (r367913) +++ stable/12/usr.sbin/iscsid/login.c Sat Nov 21 00:40:59 2020 (r367914) @@ -341,6 +341,11 @@ login_negotiate_key(struct connection *conn, const cha 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