xref: /aosp_15_r20/external/sg3_utils/scripts/55-scsi-sg3_id.rules (revision 44704f698541f6367e81f991ef8bb54ccbf3fc18)
1# SCSI-ID mappings for sg3_utils
2
3ACTION=="remove", GOTO="sg3_utils_id_end"
4
5SUBSYSTEM=="block", GOTO="block_dev"
6
7# SCSI devices other than "block"
8# This code used to live in 60-persistent-storage-tape.rules.
9
10# type 8 devices are "Medium Changers"
11SUBSYSTEM=="scsi_generic", KERNEL=="sg*[0-9]", ATTRS{type}=="8", \
12  GOTO="scsi_inquiry"
13SUBSYSTEM=="scsi_changer", KERNEL=="sch*[0-9]", ATTRS{type}=="8", \
14  ENV{.INQUIRY_DEV}="$root/bsg/$id", GOTO="scsi_inquiry"
15
16# tapes need to be accessed through their bsg device
17KERNEL=="st*[0-9]|nst*[0-9]", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", \
18  ENV{.INQUIRY_DEV}="$root/bsg/$id", GOTO="scsi_inquiry"
19
20GOTO="sg3_utils_id_end"
21
22LABEL="block_dev"
23
24# Import values for partitions
25ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_SCSI", IMPORT{parent}="SCSI_*"
26ENV{DEVTYPE}=="partition", ENV{ID_SCSI}=="1", GOTO="compat"
27
28# Handle non-SCSI devices that implement SCSI inquiry
29KERNEL=="cciss*", ENV{DEVTYPE}=="disk", GOTO="sg_inquiry"
30
31# Ignore everything else except sd/sr
32KERNEL!="sd*[!0-9]|sr*", GOTO="sg3_utils_id_end"
33
34# SCSI INQUIRY values
35# If the 'inquiry' sysfs attribute is present the kernel will already
36# have scanned for VPD pages, so if the vpd page attribute is not
37# present it is not supported (or deemed unsafe to access).
38# Hence we can skip the call to sg_inq and avoid I/O altogether.
39# Set 'ID_SCSI_INQUIRY=0' in an earlier udev rule if the kernel
40# fails to scan VPD pages correctly; the rules will then fall
41# back to calling sg_vpd directly.
42LABEL="scsi_inquiry"
43ENV{ID_SCSI_INQUIRY}=="0", GOTO="sg_inquiry"
44
45# "inquiry" is an attribute of the scsi_device in sysfs,
46# we obtain it by using $id after an ATTRS match.
47SUBSYSTEMS=="scsi", ATTRS{inquiry}=="*", KERNELS=="[0-9]*:*[0-9]", \
48  ENV{.SYSFS_PATH}="$sys/class/scsi_device/$id/device"
49ENV{.SYSFS_PATH}=="", GOTO="sg_inquiry"
50
51IMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/inquiry --raw", \
52  ENV{ID_SCSI}="1", ENV{ID_SCSI_INQUIRY}="1"
53# If inquiry sysfs attribute reading it failed, fallback to sg
54ENV{ID_SCSI}!="1", GOTO="sg_inquiry"
55# Read VPD pages 80 (sn) and 83 (di)
56IMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/vpd_pg80 --raw"
57IMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/vpd_pg83 --raw"
58GOTO="compat"
59
60LABEL="sg_inquiry"
61# Handle devices that have no inquiry attributes in sysfs
62ENV{.INQUIRY_DEV}=="", ENV{.INQUIRY_DEV}="$tempnode"
63
64IMPORT{program}="/usr/bin/sg_inq --export $env{.INQUIRY_DEV}", ENV{ID_SCSI}="1"
65# Give up if this fails, too
66ENV{ID_SCSI}!="1", GOTO="sg3_utils_id_end"
67IMPORT{program}="/usr/bin/sg_inq --export --page=sn $env{.INQUIRY_DEV}"
68IMPORT{program}="/usr/bin/sg_inq --export --page=di $env{.INQUIRY_DEV}"
69
70LABEL="compat"
71
72# scsi_id compat mappings
73ENV{ID_VENDOR}!="?*", ENV{SCSI_VENDOR}=="?*", ENV{ID_VENDOR}="$env{SCSI_VENDOR}"
74ENV{ID_VENDOR_ENC}!="?*", ENV{SCSI_VENDOR_ENC}=="?*", ENV{ID_VENDOR_ENC}="$env{SCSI_VENDOR_ENC}"
75ENV{ID_MODEL}!="?*", ENV{SCSI_MODEL}=="?*", ENV{ID_MODEL}="$env{SCSI_MODEL}"
76ENV{ID_MODEL_ENC}!="?*", ENV{SCSI_MODEL_ENC}=="?*", ENV{ID_MODEL_ENC}="$env{SCSI_MODEL_ENC}"
77ENV{ID_REVISION}!="?*", ENV{SCSI_REVISION}=="?*", ENV{ID_REVISION}="$env{SCSI_REVISION}"
78ENV{ID_TYPE}!="?*", ENV{SCSI_TYPE}=="?*", ENV{ID_TYPE}="$env{SCSI_TYPE}"
79ENV{ID_TARGET_PORT}!="?*", ENV{SCSI_IDENT_PORT_TARGET_PORT_GROUP}=="?*", \
80	PROGRAM="/bin/sh -c 'echo $env{SCSI_IDENT_PORT_TARGET_PORT_GROUP} | /bin/sed s/^0x//'", \
81	ENV{ID_TARGET_PORT}="$result"
82
83# ID_WWN compat mapping
84ENV{SCSI_IDENT_LUN_NAA_REGEXT}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_REGEXT}"
85ENV{SCSI_IDENT_LUN_NAA_REG}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_REG}"
86ENV{SCSI_IDENT_LUN_NAA_EXT}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_EXT}"
87ENV{SCSI_IDENT_LUN_NAA_LOCAL}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_LOCAL}"
88# ID_WWN has max 16 characters
89ENV{ID_WWN_WITH_EXTENSION}=="?*", ENV{ID_WWN}!="?*", \
90	PROGRAM="/bin/sh -c 'echo $env{ID_WWN_WITH_EXTENSION} | /bin/sed s/^\\\(0x.\\\{1,16\\\}\\\).*/\\1/'", \
91	ENV{ID_WWN}="$result"
92
93# ata_id compatibility
94ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_ATA}=="?*", ENV{ID_BUS}="ata", ENV{ID_ATA}="1", ENV{ID_SERIAL}="$env{SCSI_IDENT_LUN_ATA}"
95ENV{ID_SERIAL_SHORT}!="?*", ENV{SCSI_VENDOR}=="ATA", ENV{SCSI_IDENT_LUN_VENDOR}=="?*", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_VENDOR}"
96# Compat ID_SERIAL setting
97ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA_REGEXT}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA_REGEXT}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA_REGEXT}"
98ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA_REG}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA_REG}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA_REG}"
99ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA_EXT}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA_EXT}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA_EXT}"
100ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_EUI64}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="2$env{SCSI_IDENT_LUN_EUI64}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_EUI64}"
101ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAME}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="8$env{SCSI_IDENT_LUN_NAME}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAME}"
102ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_T10}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="1$env{SCSI_IDENT_LUN_T10}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_T10}"
103ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_NAA_LOCAL}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="3$env{SCSI_IDENT_LUN_NAA_LOCAL}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_NAA_LOCAL}"
104ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_VENDOR}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="0$env{SCSI_VENDOR}_$env{SCSI_MODEL}_$env{SCSI_IDENT_LUN_VENDOR}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_VENDOR}"
105ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_SERIAL}=="?*", ENV{ID_BUS}="scsi", ENV{ID_SERIAL}="S$env{SCSI_VENDOR}_$env{SCSI_MODEL}_$env{SCSI_IDENT_SERIAL}", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_SERIAL}"
106
107# Compat ID_SCSI_SERIAL setting
108ENV{ID_SCSI_SERIAL}!="?*", ENV{SCSI_IDENT_SERIAL}=="?*", ENV{ID_SCSI_SERIAL}="$env{SCSI_IDENT_SERIAL}"
109LABEL="sg3_utils_id_end"
110