svn commit: r310356 - in head: sys/cam/ctl usr.sbin/ctladm

Alexander Motin mav at FreeBSD.org
Wed Dec 21 09:05:32 UTC 2016


Author: mav
Date: Wed Dec 21 09:05:30 2016
New Revision: 310356
URL: https://svnweb.freebsd.org/changeset/base/310356

Log:
  Add support for locally assigned RFC 4122 UUID LUN identifiers.
  
  MFC after:	2 weeks

Modified:
  head/sys/cam/ctl/ctl.c
  head/usr.sbin/ctladm/ctladm.8

Modified: head/sys/cam/ctl/ctl.c
==============================================================================
--- head/sys/cam/ctl/ctl.c	Wed Dec 21 08:32:20 2016	(r310355)
+++ head/sys/cam/ctl/ctl.c	Wed Dec 21 09:05:30 2016	(r310356)
@@ -4371,6 +4371,8 @@ hex2bin(const char *str, uint8_t *buf, i
 		str += 2;
 	buf_size *= 2;
 	for (i = 0; str[i] != 0 && i < buf_size; i++) {
+		while (str[i] == '-')	/* Skip dashes in UUIDs. */
+			str++;
 		c = str[i];
 		if (isdigit(c))
 			c -= '0';
@@ -4406,7 +4408,7 @@ ctl_alloc_lun(struct ctl_softc *ctl_soft
 	struct ctl_lun *nlun, *lun;
 	struct scsi_vpd_id_descriptor *desc;
 	struct scsi_vpd_id_t10 *t10id;
-	const char *eui, *naa, *scsiname, *vendor, *value;
+	const char *eui, *naa, *scsiname, *uuid, *vendor, *value;
 	int lun_number, i, lun_malloced;
 	int devidlen, idlen1, idlen2 = 0, len;
 
@@ -4458,6 +4460,10 @@ ctl_alloc_lun(struct ctl_softc *ctl_soft
 	if (naa != NULL) {
 		len += sizeof(struct scsi_vpd_id_descriptor) + 16;
 	}
+	uuid = ctl_get_opt(&be_lun->options, "uuid");
+	if (uuid != NULL) {
+		len += sizeof(struct scsi_vpd_id_descriptor) + 18;
+	}
 	lun->lun_devid = malloc(sizeof(struct ctl_devid) + len,
 	    M_CTL, M_WAITOK | M_ZERO);
 	desc = (struct scsi_vpd_id_descriptor *)lun->lun_devid->data;
@@ -4504,6 +4510,16 @@ ctl_alloc_lun(struct ctl_softc *ctl_soft
 		desc->length = desc->length > 8 ? 16 : 8;
 		len -= 16 - desc->length;
 	}
+	if (uuid != NULL) {
+		desc = (struct scsi_vpd_id_descriptor *)(&desc->identifier[0] +
+		    desc->length);
+		desc->proto_codeset = SVPD_ID_CODESET_BINARY;
+		desc->id_type = SVPD_ID_PIV | SVPD_ID_ASSOC_LUN |
+		    SVPD_ID_TYPE_UUID;
+		desc->identifier[0] = 0x10;
+		hex2bin(uuid, &desc->identifier[2], 16);
+		desc->length = 18;
+	}
 	lun->lun_devid->len = len;
 
 	mtx_lock(&ctl_softc->ctl_lock);

Modified: head/usr.sbin/ctladm/ctladm.8
==============================================================================
--- head/usr.sbin/ctladm/ctladm.8	Wed Dec 21 08:32:20 2016	(r310355)
+++ head/usr.sbin/ctladm/ctladm.8	Wed Dec 21 09:05:30 2016	(r310356)
@@ -35,7 +35,7 @@
 .\" $Id: //depot/users/kenm/FreeBSD-test2/usr.sbin/ctladm/ctladm.8#3 $
 .\" $FreeBSD$
 .\"
-.Dd October 15, 2016
+.Dd December 21, 2016
 .Dt CTLADM 8
 .Os
 .Sh NAME
@@ -859,9 +859,12 @@ Specifies LUN SCSI name string.
 Specifies LUN EUI-64 identifier.
 .It Va naa
 Specifies LUN NAA identifier.
-Either EUI or NAA identifier should be set to UNIQUE value to allow
+.It Va uuid
+Specifies LUN locally assigned RFC 4122 UUID identifier.
+EUI, NAA or UUID identifier should be set to UNIQUE value to allow
 EXTENDED COPY command access the LUN.
 Non-unique LUN identifiers may lead to data corruption.
+Some initiators may not support later introduced UUID identifiers.
 .It Va ha_role
 Setting to "primary" or "secondary" overrides default role of the node
 in HA cluster, set by kern.cam.ctl.ha_role sysctl.


More information about the svn-src-head mailing list