Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Jun 2015 09:41:10 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r284908 - stable/10/usr.sbin/ctld
Message-ID:  <201506280941.t5S9fA59091572@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Sun Jun 28 09:41:10 2015
New Revision: 284908
URL: https://svnweb.freebsd.org/changeset/base/284908

Log:
  MFC r284765, r284875:
  Teach ctld about CTL's physical_port and virtual_port fields.
  
  This allows ctld to work with isp(4) virtual ports, specifying them as
  isp0/1, isp0/2, etc.  There are still problems on isp(4) layer with
  disabling those ports after enabling, but hopefully they can be fixed.

Modified:
  stable/10/usr.sbin/ctld/ctl.conf.5
  stable/10/usr.sbin/ctld/kernel.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/usr.sbin/ctld/ctl.conf.5
==============================================================================
--- stable/10/usr.sbin/ctld/ctl.conf.5	Sun Jun 28 09:27:34 2015	(r284907)
+++ stable/10/usr.sbin/ctld/ctl.conf.5	Sun Jun 28 09:41:10 2015	(r284908)
@@ -27,7 +27,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 19, 2015
+.Dd June 24, 2015
 .Dt CTL.CONF 5
 .Os
 .Sh NAME
@@ -321,7 +321,9 @@ Optional second argument specifies auth 
 to this specific portal group.
 If second argument is not specified, target auth group is used.
 .It Ic port Ar name
-Assign specified CTL port (such as "isp0") to the target.
+.It Ic port Ar name/pp
+.It Ic port Ar name/pp/vp
+Assign specified CTL port (such as "isp0" or "isp2/1") to the target.
 On startup ctld configures LUN mapping and enables all assigned ports.
 Each port can be assigned to only one target.
 .It Ic redirect Aq Ar address

Modified: stable/10/usr.sbin/ctld/kernel.c
==============================================================================
--- stable/10/usr.sbin/ctld/kernel.c	Sun Jun 28 09:27:34 2015	(r284907)
+++ stable/10/usr.sbin/ctld/kernel.c	Sun Jun 28 09:41:10 2015	(r284908)
@@ -122,6 +122,8 @@ struct cctl_lun {
 struct cctl_port {
 	uint32_t port_id;
 	char *port_name;
+	int pp;
+	int vp;
 	int cfiscsi_state;
 	char *cfiscsi_target;
 	uint16_t cfiscsi_portal_group_tag;
@@ -334,6 +336,10 @@ cctl_end_pelement(void *user_data, const
 	if (strcmp(name, "port_name") == 0) {
 		cur_port->port_name = str;
 		str = NULL;
+	} else if (strcmp(name, "physical_port") == 0) {
+		cur_port->pp = strtoul(str, NULL, 0);
+	} else if (strcmp(name, "virtual_port") == 0) {
+		cur_port->vp = strtoul(str, NULL, 0);
 	} else if (strcmp(name, "cfiscsi_target") == 0) {
 		cur_port->cfiscsi_target = str;
 		str = NULL;
@@ -391,7 +397,7 @@ conf_new_from_kernel(void)
 	struct cctl_lun *lun;
 	struct cctl_port *port;
 	XML_Parser parser;
-	char *str;
+	char *str, *name;
 	int len, retval;
 
 	bzero(&devlist, sizeof(devlist));
@@ -500,18 +506,28 @@ retry_port:
 
 	conf = conf_new();
 
+	name = NULL;
 	STAILQ_FOREACH(port, &devlist.port_list, links) {
+		if (name)
+			free(name);
+		if (port->pp == 0 && port->vp == 0)
+			name = checked_strdup(port->port_name);
+		else if (port->vp == 0)
+			asprintf(&name, "%s/%d", port->port_name, port->pp);
+		else
+			asprintf(&name, "%s/%d/%d", port->port_name, port->pp,
+			    port->vp);
 
 		if (port->cfiscsi_target == NULL) {
 			log_debugx("CTL port %u \"%s\" wasn't managed by ctld; ",
-			    port->port_id, port->port_name);
-			pp = pport_find(conf, port->port_name);
+			    port->port_id, name);
+			pp = pport_find(conf, name);
 			if (pp == NULL) {
 #if 0
 				log_debugx("found new kernel port %u \"%s\"",
-				    port->port_id, port->port_name);
+				    port->port_id, name);
 #endif
-				pp = pport_new(conf, port->port_name, port->port_id);
+				pp = pport_new(conf, name, port->port_id);
 				if (pp == NULL) {
 					log_warnx("pport_new failed");
 					continue;
@@ -560,6 +576,8 @@ retry_port:
 		}
 		cp->p_ctl_port = port->port_id;
 	}
+	if (name)
+		free(name);
 
 	STAILQ_FOREACH(lun, &devlist.lun_list, links) {
 		struct cctl_lun_nv *nv;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506280941.t5S9fA59091572>