We're interested in moving from iscsitgtd to COMSTAR. But, we've
modified iscsitgtd to support AIX 5.x, 6.x (make SCMD_WRITE_VERIFY like
SCMD_WRITE_G1) initiators and HP-UX 11.23 initiators (report target port
number in TargetAddress response). I've attached our patch. What files
would I need to modify to move this patch to COMSTAR?

cf:
  
http://mail.opensolaris.org/pipermail/storage-discuss/2008-September/004794.html
  http://mail.opensolaris.org/pipermail/storage-discuss/2008-June/004264.html
  
-- 
albert chin ([email protected])
--- src/cmd/iscsi/iscsitgtd/t10_raw_if.c.orig   Sun May  3 23:05:41 2009
+++ src/cmd/iscsi/iscsitgtd/t10_raw_if.c        Sun Aug 30 16:08:33 2009
@@ -595,6 +595,7 @@
                break;
 
        case SCMD_WRITE_G1:
+       case SCMD_WRITE_VERIFY:
                /*
                 * SBC-2 revision 16, section 5.25
                 * Reserve bit checks.
--- src/cmd/iscsi/iscsitgtd/t10_sbc.c.orig      Sun May  3 23:05:41 2009
+++ src/cmd/iscsi/iscsitgtd/t10_sbc.c   Sun Aug 30 16:08:33 2009
@@ -601,6 +601,7 @@
                break;
 
        case SCMD_WRITE_G1:
+       case SCMD_WRITE_VERIFY:
                /*
                 * SBC-2 revision 16, section 5.25
                 * Reserve bit checks.
@@ -2072,7 +2073,7 @@
        { spc_unsupported,      NULL,   NULL,   NULL },
        { spc_unsupported,      NULL,   NULL,   NULL },
        { spc_unsupported,      NULL,   NULL,   NULL },
-       { spc_unsupported,      NULL,   NULL,   NULL },
+       { sbc_write, sbc_write_data, sbc_write_cmplt,   "WRITE_VERIFY_G1" },
        { sbc_verify,   sbc_verify_data,        NULL,   "VERIFY_G1" },
 
        /* 0x30 -- 0x3f */
--- src/cmd/iscsi/iscsitgtd/main.c.orig Sun May  3 23:05:41 2009
+++ src/cmd/iscsi/iscsitgtd/main.c      Sun Aug 30 16:09:37 2009
@@ -81,6 +81,7 @@
 char           *target_log             = DEFAULT_TARGET_LOG;
 char           *config_file            = DEFAULT_CONFIG_LOCATION;
 char           *pgr_basedir            = NULL;
+char           iscsi_port_string[7]    = ""; /* ":65536\0" is longest */
 int            iscsi_port              = 3260, /* defined by the spec */
                dbg_lvl                 = 0,
                door_min_space;
@@ -121,6 +122,7 @@
        {XML_ELEMENT_ISNS_ACCESS,       0,      NULL},
        {XML_ELEMENT_ISNS_SERV,         valid_isns_srv, NULL},
        {XML_ELEMENT_FAST,              0,      NULL},
+       {XML_ELEMENT_FORCE_PORT,        0,      NULL},
        {XML_ELEMENT_DELETE_CHAPSECRET, 0,      XML_ELEMENT_CHAPSECRET},
        {XML_ELEMENT_DELETE_CHAPNAME,   0,      XML_ELEMENT_CHAPNAME},
        {XML_ELEMENT_DELETE_RAD_SECRET, 0,      XML_ELEMENT_RAD_SECRET},
@@ -215,6 +217,17 @@
        if (tgt_find_value_intchk(node, XML_ELEMENT_LOGLVL,
            &qlog_lvl) == True)
                queue_log(True);
+       {
+               Boolean_t force_port = False;
+               (void) tgt_find_value_boolean(node, XML_ELEMENT_FORCE_PORT,
+                   &force_port);
+               if (force_port) {
+                       snprintf(iscsi_port_string,
+                               sizeof(iscsi_port_string),":%d",iscsi_port);
+               } else {
+                       iscsi_port_string[0] = '\0';
+               }
+       }
 
        main_config = node;
        targets_config = node;
--- src/cmd/iscsi/iscsitgtd/util_ifname.c.orig  Sun May  3 23:05:41 2009
+++ src/cmd/iscsi/iscsitgtd/util_ifname.c       Sun Aug 30 16:08:33 2009
@@ -188,11 +188,13 @@
                            ip_buf, sizeof (ip_buf));
 
                        if (sp->sa_family == AF_INET) {
-                               (void) snprintf(ta, sizeof (ta), "%s,1",
-                                   ip_buf);
+                               (void) snprintf(ta, sizeof (ta), "%s%s,1",
+                                   ip_buf,
+                                   iscsi_port_string);
                        } else if (sp->sa_family == AF_INET6) {
-                               (void) snprintf(ta, sizeof (ta), "[%s],1",
-                                   ip_buf);
+                               (void) snprintf(ta, sizeof (ta), "[%s]%s,1",
+                                   ip_buf,
+                                   iscsi_port_string);
                        } else
                                goto clean_up;
 
@@ -227,11 +229,13 @@
                        dump_addr_to_ascii(sp2, ip_buf, sizeof (ip_buf));
 
                        if (sp2->sa_family == AF_INET) {
-                               (void) snprintf(ta, sizeof (ta), "%s,1",
-                                   ip_buf);
+                               (void) snprintf(ta, sizeof (ta), "%s%s,1",
+                                   ip_buf,
+                                   iscsi_port_string);
                        } else if (sp2->sa_family == AF_INET6) {
-                               (void) snprintf(ta, sizeof (ta), "[%s],1",
-                                   ip_buf);
+                               (void) snprintf(ta, sizeof (ta), "[%s]%s,1",
+                                   ip_buf,
+                                   iscsi_port_string);
                        } else
                                goto clean_up;
                        (void) add_text(text, text_length, "TargetAddress", ta);
--- src/cmd/iscsi/iscsitgtd/target.h.orig       Sun May  3 23:05:41 2009
+++ src/cmd/iscsi/iscsitgtd/target.h    Sun Aug 30 16:08:33 2009
@@ -241,6 +241,7 @@
                        targets_vers_maj,
                        targets_vers_min,
                        iscsi_port;
+extern char            iscsi_port_string[];
 extern Boolean_t       enforce_strict_guid,
                        thin_provisioning,
                        disable_tpgs,
--- src/cmd/iscsi/iscsitgtd/util.c.orig Sun May  3 23:05:41 2009
+++ src/cmd/iscsi/iscsitgtd/util.c      Sun Aug 30 16:10:26 2009
@@ -226,8 +226,7 @@
                                         * Valid IPv4 address
                                         */
                                        (void) snprintf(buf, sizeof (buf),
-
-                                           "%s,%s", x->x_value, local_tpgt);
+                                           "%s%s,%s", x->x_value, 
iscsi_port_string, local_tpgt);
                                } else {
                                        /*
                                         * Invalid IPv4 address
@@ -234,7 +233,7 @@
                                         * try with brackets (RFC2732)
                                         */
                                        (void) snprintf(buf, sizeof (buf),
-                                           "[%s],%s", x->x_value, local_tpgt);
+                                           "[%s]%s,%s", x->x_value, 
iscsi_port_string,local_tpgt);
                                }
                                (void) add_text(text, text_length,
                                    "TargetAddress", buf);
@@ -260,9 +259,11 @@
        struct sockaddr_in      *sp4;
        struct sockaddr_in6     *sp6;
        /*
-        * 7 is enough room for the largest TPGT of "65536", the ',' and a NULL
+        * 13 is enough room for:
+        * ":65535" (the largest port)
+        * ",65536" (the larget TGPT) and a NULL 
         */
-       char    buf[INET6_ADDRSTRLEN + 7];
+       char    buf[INET6_ADDRSTRLEN + 13];
        char    net_buf[INET6_ADDRSTRLEN];
 
        if ((tpgt_list = tgt_node_next(targ, XML_ELEMENT_TPGTLIST,
@@ -279,18 +280,20 @@
                        if (c->c_target_sockaddr.ss_family == AF_INET) {
                                sp4 = (struct sockaddr_in *)
                                    &c->c_target_sockaddr;
-                               (void) snprintf(buf, sizeof (buf), "%s,%s",
+                               (void) snprintf(buf, sizeof (buf), "%s%s,%s",
                                    inet_ntop(sp4->sin_family,
                                    (void *)&sp4->sin_addr,
                                    net_buf, sizeof (net_buf)),
+                                   iscsi_port_string,
                                    tpgt->x_value);
                        } else {
                                sp6 = (struct sockaddr_in6 *)
                                    &c->c_target_sockaddr;
-                               (void) snprintf(buf, sizeof (buf), "[%s],%s",
+                               (void) snprintf(buf, sizeof (buf), "[%s]%s,%s",
                                    inet_ntop(sp6->sin6_family,
                                    (void *)&sp6->sin6_addr,
                                    net_buf, sizeof (net_buf)),
+                                   iscsi_port_string,
                                    tpgt->x_value);
                        }
                        (void) add_text(text, text_length, "TargetAddress",
--- src/lib/libiscsitgt/common/iscsitgt_impl.h.orig     Sun May  3 23:06:00 2009
+++ src/lib/libiscsitgt/common/iscsitgt_impl.h  Sun Aug 30 16:08:33 2009
@@ -85,6 +85,7 @@
 #define        XML_ELEMENT_ISNS_SERV   "isns-server"
 #define        XML_ELEMENT_ISNS_SERVER_STATUS  "isns-server-status"
 #define        XML_ELEMENT_FAST        "fast-write-ack"
+#define        XML_ELEMENT_FORCE_PORT  "force-port-in-targetaddress"
 #define        XML_ELEMENT_NAME        "name"
 #define        XML_ELEMENT_ACL         "acl"
 #define        XML_ELEMENT_ACLLIST     "acl-list"
_______________________________________________
storage-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/storage-discuss

Reply via email to