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