[stgt] [PATCH 2/2] iscsi: add 'port' boot parameter

FUJITA Tomonori fujita.tomonori at lab.ntt.co.jp
Sat Oct 3 12:31:53 CEST 2009


Signed-off-by: FUJITA Tomonori <fujita.tomonori at lab.ntt.co.jp>
---
 usr/iscsi/iscsi_rdma.c |    2 +-
 usr/iscsi/iscsi_tcp.c  |    2 +-
 usr/iscsi/iscsid.c     |   20 +++++++++++++++++++-
 usr/iscsi/iscsid.h     |    2 ++
 usr/iscsi/isns.c       |    2 +-
 5 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/usr/iscsi/iscsi_rdma.c b/usr/iscsi/iscsi_rdma.c
index b25abf7..6cf5677 100644
--- a/usr/iscsi/iscsi_rdma.c
+++ b/usr/iscsi/iscsi_rdma.c
@@ -1146,7 +1146,7 @@ static int iscsi_rdma_init(void)
 {
 	int ret;
 	struct sockaddr_in sock_addr;
-	short int port = ISCSI_LISTEN_PORT;
+	short int port = iscsi_listen_port;
 
 	rdma_evt_channel = rdma_create_event_channel();
 
diff --git a/usr/iscsi/iscsi_tcp.c b/usr/iscsi/iscsi_tcp.c
index edc4e86..75d77ba 100644
--- a/usr/iscsi/iscsi_tcp.c
+++ b/usr/iscsi/iscsi_tcp.c
@@ -176,7 +176,7 @@ static int iscsi_tcp_init(void)
 	int ret, fd, opt, nr_sock = 0;
 
 	memset(servname, 0, sizeof(servname));
-	snprintf(servname, sizeof(servname), "%d", ISCSI_LISTEN_PORT);
+	snprintf(servname, sizeof(servname), "%d", iscsi_listen_port);
 
 	memset(&hints, 0, sizeof(hints));
 	hints.ai_socktype = SOCK_STREAM;
diff --git a/usr/iscsi/iscsid.c b/usr/iscsi/iscsid.c
index 634e0d1..53e37bf 100644
--- a/usr/iscsi/iscsid.c
+++ b/usr/iscsi/iscsid.c
@@ -42,6 +42,8 @@
 
 #define MAX_QUEUE_CMD	128
 
+int iscsi_listen_port = ISCSI_LISTEN_PORT;
+
 enum {
 	IOSTATE_FREE,
 
@@ -828,7 +830,7 @@ static void text_scan_text(struct iscsi_connection *conn)
 			if (ss.ss_family == AF_INET6)
 				 *p++ = ']';
 
-			sprintf(p, ":%d,1", ISCSI_LISTEN_PORT);
+			sprintf(p, ":%d,1", iscsi_listen_port);
 			target_list_build(conn, buf,
 					  strcmp(value, "All") ? value : NULL);
 		} else
@@ -2253,7 +2255,23 @@ static struct tgt_driver iscsi = {
 	.default_bst		= "rdwr",
 };
 
+static int iscsi_param_parser(char *p)
+{
+	while (*p) {
+		if (!strncmp(p, "port", 4))
+			iscsi_listen_port = atoi(p + 5);
+
+		p += strcspn(p, ",");
+		if (*p == ',')
+			++p;
+	}
+
+	return 0;
+}
+
 __attribute__((constructor)) static void iscsi_driver_constructor(void)
 {
 	register_driver(&iscsi);
+
+	setup_param("iscsi", iscsi_param_parser);
 }
diff --git a/usr/iscsi/iscsid.h b/usr/iscsi/iscsid.h
index 02caad2..666d2bb 100644
--- a/usr/iscsi/iscsid.h
+++ b/usr/iscsi/iscsid.h
@@ -251,6 +251,8 @@ enum task_flags {
 	TASK_in_scsi,
 };
 
+extern int iscsi_listen_port;
+
 #define set_task_pending(t)	((t)->flags |= (1 << TASK_pending))
 #define clear_task_pending(t)	((t)->flags &= ~(1 << TASK_pending))
 #define task_pending(t)		((t)->flags & (1 << TASK_pending))
diff --git a/usr/iscsi/isns.c b/usr/iscsi/isns.c
index 88e5211..3bfc1fc 100644
--- a/usr/iscsi/isns.c
+++ b/usr/iscsi/isns.c
@@ -392,7 +392,7 @@ int isns_target_register(char *name)
 	uint16_t flags = 0, length = 0;
 	struct isns_hdr *hdr = (struct isns_hdr *) buf;
 	struct isns_tlv *tlv;
-	uint32_t port = htonl(ISCSI_LISTEN_PORT);
+	uint32_t port = htonl(iscsi_listen_port);
 	uint32_t node = htonl(ISNS_NODE_TARGET);
 	uint32_t type = htonl(2);
 	struct iscsi_target *target;
-- 
1.5.6.5

--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list