Add support for locally assigned RFC 4122 UUID LUN identifiers.
MFC after: 2 weeks
This commit is contained in:
parent
1982624784
commit
f383d6efd5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=310356
@ -4371,6 +4371,8 @@ hex2bin(const char *str, uint8_t *buf, int buf_size)
|
||||
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_softc, struct ctl_lun *ctl_lun,
|
||||
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_softc, struct ctl_lun *ctl_lun,
|
||||
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_softc, struct ctl_lun *ctl_lun,
|
||||
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);
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user