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