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
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to