Файловый менеджер - Редактировать - /home/freeclou/app.optimyar.com/front-web/build/assets/styles/udev.tar
Назад
rules.d/63-scsi-sg3_symlink.rules 0000644 00000005632 15107240613 0012630 0 ustar 00 # SCSI-ID symlinks for sg3_utils ACTION=="remove", GOTO="sg3_utils_symlink_end" SUBSYSTEM!="block", GOTO="sg3_utils_symlink_end" ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="sg3_utils_symlink_end" # Skip symlink generation for multipath ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="sg3_utils_symlink_end" # Select which identifier to use per default # 0: vpd page 0x80 identifier ENV{SCSI_IDENT_SERIAL}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-S$env{SCSI_VENDOR}_$env{SCSI_MODEL}_$env{SCSI_IDENT_SERIAL}" ENV{SCSI_IDENT_SERIAL}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-S$env{SCSI_VENDOR}_$env{SCSI_MODEL}_$env{SCSI_IDENT_SERIAL}-part%n" # NAA identifier (prefix 3) # 1: IEEE Registered Extended first ENV{SCSI_IDENT_LUN_NAA_REGEXT}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-3$env{SCSI_IDENT_LUN_NAA_REGEXT}" ENV{SCSI_IDENT_LUN_NAA_REGEXT}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-3$env{SCSI_IDENT_LUN_NAA_REGEXT}-part%n" # 2: IEEE Registered ENV{SCSI_IDENT_LUN_NAA_REG}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-3$env{SCSI_IDENT_LUN_NAA_REG}" ENV{SCSI_IDENT_LUN_NAA_REG}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-3$env{SCSI_IDENT_LUN_NAA_REG}-part%n" # 3: IEEE Extended ENV{SCSI_IDENT_LUN_NAA_EXT}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-3$env{SCSI_IDENT_LUN_NAA_EXT}" ENV{SCSI_IDENT_LUN_NAA_EXT}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-3$env{SCSI_IDENT_LUN_NAA_EXT}-part%n" # 4: EUI-64 identifier (prefix 2) ENV{SCSI_IDENT_LUN_EUI64}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-2$env{SCSI_IDENT_LUN_EUI64}" ENV{SCSI_IDENT_LUN_EUI64}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-2$env{SCSI_IDENT_LUN_EUI64}-part%n" # 5: SCSI name identifier (prefix 8) ENV{SCSI_IDENT_LUN_NAME}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-8$env{SCSI_IDENT_LUN_NAME}" ENV{SCSI_IDENT_LUN_NAME}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-8$env{SCSI_IDENT_LUN_NAME}-part%n" # 6: T10 Vendor identifier (prefix 1) ENV{SCSI_IDENT_LUN_T10}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-1$env{SCSI_IDENT_LUN_T10}" ENV{SCSI_IDENT_LUN_T10}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-1$env{SCSI_IDENT_LUN_T10}-part%n" # 7: IEEE Locally assigned ENV{SCSI_IDENT_LUN_NAA_LOCAL}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-3$env{SCSI_IDENT_LUN_NAA_LOCAL}" ENV{SCSI_IDENT_LUN_NAA_LOCAL}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-3$env{SCSI_IDENT_LUN_NAA_LOCAL}-part%n" # 8: Vendor-specific identifier (prefix 0) ENV{SCSI_IDENT_LUN_VENDOR}=="?*", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-id/scsi-0$env{SCSI_VENDOR}_$env{SCSI_MODEL}_$env{SCSI_IDENT_LUN_VENDOR}" ENV{SCSI_IDENT_LUN_VENDOR}=="?*", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-id/scsi-0$env{SCSI_VENDOR}_$env{SCSI_MODEL}_$env{SCSI_IDENT_LUN_VENDOR}-part%n" LABEL="sg3_utils_symlink_end" rules.d/90-iprutils.rules 0000644 00000000106 15107240613 0011271 0 ustar 00 DRIVERS=="ipr", TAG+="systemd", ENV{SYSTEMD_WANTS}+="iprutils.target" rules.d/10-dm.rules 0000444 00000016504 15107240613 0010015 0 ustar 00 # Copyright (C) 2009 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # Udev rules for device-mapper devices. # # These rules create a DM control node in /dev/mapper directory. # The rules also create nodes named dm-x (x is a number) in /dev # directory and symlinks to these nodes with names given by # the actual DM names. Some udev environment variables are set # for use in later rules: # DM_NAME - actual DM device's name # DM_UUID - UUID set for DM device (blank if not specified) # DM_SUSPENDED - suspended state of DM device (0 or 1) # DM_UDEV_RULES_VSN - DM udev rules version # # These rules cover only basic device-mapper functionality in udev. # # Various DM subsystems may contain further subsystem-specific rules # in 11-dm-<subsystem_name>.rules which should be installed together # with the DM subsystem and which extend these basic rules. # For example: # 11-dm-lvm.rules for LVM subsystem # 11-dm-mpath.rules for multipath subsystem (since version 0.6.0, recommended!) # # Even more specific rules may be required by subsystems so always # check subsystem's upstream repository for recent set of rules. # Also, keep in mind that recent rules may also require recent # subsystem-specific binaries. SUBSYSTEM!="block", GOTO="dm_end" KERNEL!="dm-[0-9]*", GOTO="dm_end" # Device created, major and minor number assigned - "add" event generated. # Table loaded - no event generated. # Device resumed (or renamed) - "change" event generated. # Device removed - "remove" event generated. # # The dm-X nodes are always created, even on "add" event, we can't suppress # that (the node is created even earlier with devtmpfs). All the symlinks # (e.g. /dev/mapper) are created in right time after a device has its table # loaded and is properly resumed. For this reason, direct use of dm-X nodes # is not recommended. ACTION=="remove", GOTO="dm_end" # Persist device state on transition from the initrd. This means all udev device # properties are kept in the udev database even when it is cleaned up on # switch-root. OPTIONS+="db_persist" # Decode udev control flags and set environment variables appropriately. # These flags are encoded in DM_COOKIE variable that was introduced in # kernel version 2.6.31. Therefore, we can use this feature with # kernels >= 2.6.31 only. Cookie is not decoded for remove event. ENV{DM_COOKIE}=="?*", IMPORT{program}="/usr/sbin/dmsetup udevflags $env{DM_COOKIE}" # There is no cookie set nor any flags encoded in events not originating # in libdevmapper so we need to detect this and try to behave correctly. # For such spurious events, regenerate all flags from current udev database content # (this information would normally be inaccessible for spurious ADD and CHANGE events). ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}="1", GOTO="dm_flags_done" IMPORT{db}="DM_UDEV_DISABLE_DM_RULES_FLAG" IMPORT{db}="DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG" IMPORT{db}="DM_UDEV_DISABLE_DISK_RULES_FLAG" IMPORT{db}="DM_UDEV_DISABLE_OTHER_RULES_FLAG" IMPORT{db}="DM_UDEV_LOW_PRIORITY_FLAG" IMPORT{db}="DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG" IMPORT{db}="DM_UDEV_PRIMARY_SOURCE_FLAG" IMPORT{db}="DM_UDEV_FLAG7" IMPORT{db}="DM_UDEV_RULES_VSN" LABEL="dm_flags_done" # If DISK_RO is set, it's an uevent that changes the ro attribute of the device. # The event should be ignored as far as dm is concerned. ENV{DISK_RO}=="0|1", GOTO="dm_disable" # Normally, we operate on "change" events. But when coldplugging, there's an # "add" event present. We have to recognize this and do our actions in this # particular situation, too. Also, we don't want the nodes to be created # prematurely on "add" events while not coldplugging. We check # DM_UDEV_PRIMARY_SOURCE_FLAG to see if the device was activated correctly # before and if not, we ignore the "add" event totally. This way we can support # udev triggers generating "add" events (e.g. "udevadm trigger --action=add" or # "echo add > /sys/block/<dm_device>/uevent"). The trigger with "add" event is # also used at boot to reevaluate udev rules for all existing devices activated # before (e.g. in initrd). If udev is used in initrd, we require the udev init # script to not remove the existing udev database so we can reuse the information # stored at the time of device activation in the initrd. ACTION!="add", GOTO="dm_no_coldplug" ENV{DM_UDEV_RULES_VSN}!="1", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", GOTO="dm_disable" ENV{DM_ACTIVATION}="1" LABEL="dm_no_coldplug" # Putting it together, following table is used to recognize genuine and spurious events. # N.B. Spurious events are generated based on use of the WATCH udev # rule or by triggering an event manually by "udevadm trigger" call # or by "echo <event_name> > /sys/block/dm-X/uevent". # # EVENT DM_UDEV_PRIMARY_SOURCE_FLAG DM_ACTIVATION # ====================================================================== # add event (genuine) 0 0 # change event (genuine) 1 1 # add event (spurious) # |_ dev still not active 0 0 # \_ dev already active 1 1 # change event (spurious) # |_ dev still not active 0 0 # \_ dev already active 1 0 # "dm" sysfs subdirectory is available in newer versions of DM # only (kernels >= 2.6.29). We have to check for its existence # and use dmsetup tool instead to get the DM name, uuid and # suspended state if the "dm" subdirectory is not present. # The "suspended" item was added even later (kernels >= 2.6.31), # so we also have to call dmsetup if the kernel version used # is in between these releases. TEST=="dm", ENV{DM_NAME}="$attr{dm/name}", ENV{DM_UUID}="$attr{dm/uuid}", ENV{DM_SUSPENDED}="$attr{dm/suspended}" TEST!="dm", IMPORT{program}="/usr/sbin/dmsetup info -j %M -m %m -c --nameprefixes --noheadings --rows -o name,uuid,suspended" ENV{DM_SUSPENDED}!="?*", IMPORT{program}="/usr/sbin/dmsetup info -j %M -m %m -c --nameprefixes --noheadings --rows -o suspended" # dmsetup tool provides suspended state information in textual # form with values "Suspended"/"Active". We translate it to # 0/1 respectively to be consistent with sysfs values. ENV{DM_SUSPENDED}=="Active", ENV{DM_SUSPENDED}="0" ENV{DM_SUSPENDED}=="Suspended", ENV{DM_SUSPENDED}="1" # This variable provides a reliable way to check that device-mapper # rules were installed. It means that all needed variables are set # by these rules directly so there's no need to acquire them again # later. Other rules can alternate the functionality based on this # fact (e.g. fallback to rules that behave correctly even without # these rules installed). It also provides versioning for any # possible future changes. # VSN 1 - original rules # VSN 2 - add support for synthesized events ENV{DM_UDEV_RULES_VSN}="2" ENV{DM_UDEV_DISABLE_DM_RULES_FLAG}!="1", ENV{DM_NAME}=="?*", SYMLINK+="mapper/$env{DM_NAME}" # Avoid processing and scanning a DM device in the other (foreign) # rules if it is in suspended state. However, we still keep 'disk' # and 'DM subsystem' related rules enabled in this case. ENV{DM_SUSPENDED}=="1", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" GOTO="dm_end" LABEL="dm_disable" ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="1" ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1" ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" OPTIONS:="nowatch" LABEL="dm_end" rules.d/13-dm-disk.rules 0000444 00000004304 15107240613 0010743 0 ustar 00 # Copyright (C) 2009 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # Udev rules for device-mapper devices. # # These rules create symlinks in /dev/disk directory. # Symlinks that depend on probing filesystem type, # label and uuid are created only if the device is not # suspended. # "add" event is processed on coldplug only! ACTION=="remove", GOTO="dm_end" ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_end" ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="dm_end" SYMLINK+="disk/by-id/dm-name-$env{DM_NAME}" ENV{DM_UUID}=="?*", SYMLINK+="disk/by-id/dm-uuid-$env{DM_UUID}" ENV{DM_SUSPENDED}=="1", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", GOTO="dm_import" ENV{DM_NOSCAN}=="1", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", GOTO="dm_import" ENV{DM_SUSPENDED}=="1", GOTO="dm_end" ENV{DM_NOSCAN}=="1", GOTO="dm_watch" IMPORT{builtin}="blkid" GOTO="dm_link" LABEL="dm_import" IMPORT{db}="ID_FS_TYPE" IMPORT{db}="ID_FS_USAGE" IMPORT{db}="ID_FS_UUID_ENC" IMPORT{db}="ID_FS_LABEL_ENC" IMPORT{db}="ID_PART_ENTRY_NAME" IMPORT{db}="ID_PART_ENTRY_UUID" IMPORT{db}="ID_PART_ENTRY_SCHEME" IMPORT{db}="ID_PART_GPT_AUTO_ROOT" LABEL="dm_link" ENV{DM_UDEV_LOW_PRIORITY_FLAG}=="1", OPTIONS="link_priority=-100" ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}" ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}" ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_GPT_AUTO_ROOT}=="1", SYMLINK+="gpt-auto-root" # Add inotify watch to track changes on this device. # Using the watch rule is not optimal - it generates a lot of spurious # and useless events whenever the device opened for read-write is closed. # The best would be to generate the event directly in the tool changing # relevant information so only relevant events will be processed # (like creating a filesystem, changing filesystem label etc.). # # But let's use this until we have something better... LABEL="dm_watch" OPTIONS+="watch" LABEL="dm_end" rules.d/95-dm-notify.rules 0000444 00000000743 15107240613 0011336 0 ustar 00 # Copyright (C) 2009 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # Udev rules for device-mapper devices. # # These rules are responsible for sending a notification to a process # waiting for completion of udev rules. The process is identified by # a cookie value sent within "change" and "remove" events (the cookie # value is set before by that process for every action requested). ENV{DM_COOKIE}=="?*", RUN+="/usr/sbin/dmsetup udevcomplete $env{DM_COOKIE}" rules.d/70-nvmf-autoconnect.rules 0000644 00000003776 15107240613 0012722 0 ustar 00 # # nvmf-autoconnect.rules: # Handles udev events which invoke automatically scan via discovery # controller and connect to elements in the discovery log. # # ACTION!="change", GOTO="autoconnect_end" # For backwards compatibility. Make sure HOST_IFACE is not an empty string. ENV{NVME_HOST_IFACE}=="", ENV{NVME_HOST_IFACE}="none" # Events from persistent discovery controllers or nvme-fc transport events # NVME_AEN: # type 0x2 (NOTICE) info 0xf0 (DISCOVERY_LOG_CHANGE) log-page-id 0x70 (DISCOVERY_LOG_PAGE) ACTION=="change", SUBSYSTEM=="nvme", ENV{NVME_AEN}=="0x70f002", \ ENV{NVME_TRTYPE}=="*", ENV{NVME_TRADDR}=="*", \ ENV{NVME_TRSVCID}=="*", ENV{NVME_HOST_TRADDR}=="*", ENV{NVME_HOST_IFACE}=="*", \ RUN+="/usr/bin/systemctl --no-block restart nvmf-connect@--device\x3d$kernel\t--transport\x3d$env{NVME_TRTYPE}\t--traddr\x3d$env{NVME_TRADDR}\t--trsvcid\x3d$env{NVME_TRSVCID}\t--host-traddr\x3d$env{NVME_HOST_TRADDR}\t--host-iface\x3d$env{NVME_HOST_IFACE}.service" # nvme-fc transport generated events (old-style for compatibility) ACTION=="change", SUBSYSTEM=="fc", ENV{FC_EVENT}=="nvmediscovery", \ ENV{NVMEFC_HOST_TRADDR}=="*", ENV{NVMEFC_TRADDR}=="*", \ RUN+="/usr/bin/systemctl --no-block restart nvmf-connect@--device\x3dnone\t--transport\x3dfc\t--traddr\x3d$env{NVMEFC_TRADDR}\t--trsvcid\x3dnone\t--host-traddr\x3d$env{NVMEFC_HOST_TRADDR}.service" # A discovery controller just (re)connected, re-read the discovery log change to # check if there were any changes since it was last connected. ACTION=="change", SUBSYSTEM=="nvme", ENV{NVME_EVENT}=="rediscover", ATTR{cntrltype}=="discovery", \ ENV{NVME_TRTYPE}=="*", ENV{NVME_TRADDR}=="*", \ ENV{NVME_TRSVCID}=="*", ENV{NVME_HOST_TRADDR}=="*", ENV{NVME_HOST_IFACE}=="*", \ RUN+="/usr/bin/systemctl --no-block restart nvmf-connect@--device\x3d$kernel\t--transport\x3d$env{NVME_TRTYPE}\t--traddr\x3d$env{NVME_TRADDR}\t--trsvcid\x3d$env{NVME_TRSVCID}\t--host-traddr\x3d$env{NVME_HOST_TRADDR}\t--host-iface\x3d$env{NVME_HOST_IFACE}.service" LABEL="autoconnect_end" rules.d/60-net.rules 0000644 00000000201 15107240613 0010175 0 ustar 00 ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result" rules.d/99-nfs.rules 0000644 00000000137 15107240613 0010221 0 ustar 00 SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="/usr/libexec/nfsrahead %k", ATTR{read_ahead_kb}="%c" rules.d/11-dm-parts.rules 0000644 00000002642 15107240613 0011145 0 ustar 00 # Rules for partitions created by kpartx KERNEL!="dm-*", GOTO="dm_parts_end" ACTION!="add|change", GOTO="dm_parts_end" ENV{DM_UUID}!="part[0-9]*", GOTO="dm_parts_end" # We must take care that symlinks don't get lost, # even if blkid fails in 13-dm-disk.rules later. # # Fixme: we have currently no way to avoid calling blkid on # partitions of broken mpath maps such as DM_NOSCAN. # But when partition devices appear, kpartx has likely read # the partition table shortly before, so odds are not bad # that blkid will also succeed. IMPORT{db}="ID_FS_USAGE" IMPORT{db}="ID_FS_UUID_ENC" IMPORT{db}="ID_FS_LABEL_ENC" IMPORT{db}="ID_PART_ENTRY_NAME" IMPORT{db}="ID_PART_ENTRY_UUID" IMPORT{db}="ID_PART_ENTRY_SCHEME" # Maps should take precedence over their members. ENV{DM_UDEV_LOW_PRIORITY_FLAG}!="1", OPTIONS+="link_priority=50" # Set some additional symlinks that typically exist for mpath # path members, too, and should be overridden. # # kpartx_id is very robust, it works for suspended maps and maps # with 0 dependencies. It sets DM_TYPE, DM_PART, DM_WWN IMPORT{program}=="kpartx_id %M %m $env{DM_UUID}" # DM_TYPE only has a reasonable value for partitions on multipath. ENV{DM_UUID}=="*-mpath-*", ENV{DM_TYPE}=="?*", ENV{DM_SERIAL}=="?*" \ SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_SERIAL}-part$env{DM_PART}" ENV{DM_WWN}=="?*", ENV{DM_PART}=="?*", \ SYMLINK+="disk/by-id/wwn-$env{DM_WWN}-part$env{DM_PART}" LABEL="dm_parts_end" rules.d/66-kpartx.rules 0000644 00000002560 15107240613 0010740 0 ustar 00 # # persistent links for device-mapper devices # only hardware-backed device-mapper devices (ie multipath, dmraid, # and kpartx) have meaningful persistent device names # KERNEL!="dm-*", GOTO="kpartx_end" ACTION!="add|change", GOTO="kpartx_end" ENV{DM_UUID}!="?*", GOTO="kpartx_end" ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="kpartx_end" # Create dm tables for partitions on multipath devices. ENV{DM_UUID}!="mpath-?*", GOTO="mpath_kpartx_end" # DM_SUBSYSTEM_UDEV_FLAG1 is the "skip_kpartx" flag. # For events not generated by libdevmapper, we need to fetch it from db: # - "change" events with DM_ACTIVATION!="1" (e.g. partition table changes) # - "add" events for which rules are not disabled ("coldplug" case) ENV{DM_ACTIVATION}!="1", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1" ACTION=="add", IMPORT{db}="DM_SUBSYSTEM_UDEV_FLAG1" ENV{DM_SUBSYSTEM_UDEV_FLAG1}=="1", GOTO="mpath_kpartx_end" # 11-dm-mpath.rules sets MPATH_UNCHANGED for events that can be ignored. ENV{MPATH_UNCHANGED}=="1", GOTO="mpath_kpartx_end" # Don't run kpartx now if we know it will fail or hang. ENV{DM_SUSPENDED}=="1", GOTO="mpath_kpartx_end" ENV{DM_NOSCAN}=="1", GOTO="mpath_kpartx_end" # Run kpartx GOTO="run_kpartx" LABEL="mpath_kpartx_end" ## Code for other subsystems (non-multipath) could be placed here ## GOTO="kpartx_end" LABEL="run_kpartx" RUN+="/sbin/kpartx -un /dev/$name" LABEL="kpartx_end" rules.d/68-del-part-nodes.rules 0000644 00000002166 15107240613 0012251 0 ustar 00 # These rules can delete partitions devnodes for slave devices # for certain aggregate devices such as multipath. # This is desirable to avoid confusion and keep the number # of device nodes and symlinks within limits. # # This is done only once on the first "add" or "change" event for # any given device. # # To suppress this, use the kernel parameter "dont_del_part_nodes", # or create an udev rule file that sets ENV{DONT_DEL_PART_NODES}="1". SUBSYSTEM!="block", GOTO="end_del_part_nodes" KERNEL!="sd*|dasd*", GOTO="end_del_part_nodes" ACTION!="add|change", GOTO="end_del_part_nodes" ENV{DEVTYPE}=="partition", GOTO="end_del_part_nodes" IMPORT{cmdline}="dont_del_part_nodes" ENV{dont_del_part_nodes}=="1", GOTO="end_del_part_nodes" ENV{DONT_DEL_PART_NODES}=="1", GOTO="end_del_part_nodes" # dm-multipath ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="del_part_nodes" # Other aggregate device types can be added here. GOTO="end_del_part_nodes" LABEL="del_part_nodes" IMPORT{db}="DM_DEL_PART_NODES" ENV{DM_DEL_PART_NODES}!="1", ENV{DM_DEL_PART_NODES}="1", \ RUN+="/usr/sbin/partx -d --nr 1-1024 $env{DEVNAME}" LABEL="end_del_part_nodes" rules.d/61-scsi-sg3_id.rules 0000644 00000014327 15107240613 0011535 0 ustar 00 # SCSI-ID mappings for sg3_utils ACTION=="remove", GOTO="sg3_utils_id_end" SUBSYSTEM=="block", GOTO="block_dev" # SCSI devices other than "block" # This code used to live in 60-persistent-storage-tape.rules. # type 8 devices are "Medium Changers" SUBSYSTEM=="scsi_generic", KERNEL=="sg*[0-9]", ATTRS{type}=="8", \ GOTO="scsi_inquiry" SUBSYSTEM=="scsi_changer", KERNEL=="sch*[0-9]", ATTRS{type}=="8", \ ENV{.INQUIRY_DEV}="$root/bsg/$id", GOTO="scsi_inquiry" # tapes need to be accessed through their bsg device KERNEL=="st*[0-9]|nst*[0-9]", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", \ ENV{.INQUIRY_DEV}="$root/bsg/$id", GOTO="scsi_inquiry" GOTO="sg3_utils_id_end" LABEL="block_dev" # Import values for partitions ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_SCSI", IMPORT{parent}="SCSI_*" ENV{DEVTYPE}=="partition", ENV{ID_SCSI}=="1", GOTO="compat" # Handle non-SCSI devices that implement SCSI inquiry KERNEL=="cciss*", ENV{DEVTYPE}=="disk", GOTO="sg_inquiry" # Ignore everything else except sd/sr KERNEL!="sd*[!0-9]|sr*", GOTO="sg3_utils_id_end" # SCSI INQUIRY values # If the 'inquiry' sysfs attribute is present the kernel will already # have scanned for VPD pages, so if the vpd page attribute is not # present it is not supported (or deemed unsafe to access). # Hence we can skip the call to sg_inq and avoid I/O altogether. # Set 'ID_SCSI_INQUIRY=0' in an earlier udev rule if the kernel # fails to scan VPD pages correctly; the rules will then fall # back to calling sg_vpd directly. LABEL="scsi_inquiry" ENV{ID_SCSI_INQUIRY}=="0", GOTO="sg_inquiry" # "inquiry" is an attribute of the scsi_device in sysfs, # we obtain it by using $id after an ATTRS match. SUBSYSTEMS=="scsi", ATTRS{inquiry}=="*", KERNELS=="[0-9]*:*[0-9]", \ ENV{.SYSFS_PATH}="$sys/class/scsi_device/$id/device" ENV{.SYSFS_PATH}=="", GOTO="sg_inquiry" IMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/inquiry --raw", \ ENV{ID_SCSI}="1", ENV{ID_SCSI_INQUIRY}="1" # If inquiry sysfs attribute reading it failed, fallback to sg ENV{ID_SCSI}!="1", GOTO="sg_inquiry" # Read VPD pages 80 (sn) and 83 (di) IMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/vpd_pg80 --raw" IMPORT{program}="/usr/bin/sg_inq --export --inhex=$env{.SYSFS_PATH}/vpd_pg83 --raw" GOTO="compat" LABEL="sg_inquiry" # Handle devices that have no inquiry attributes in sysfs ENV{.INQUIRY_DEV}=="", ENV{.INQUIRY_DEV}="$tempnode" IMPORT{program}="/usr/bin/sg_inq --export $env{.INQUIRY_DEV}", ENV{ID_SCSI}="1" # Give up if this fails, too ENV{ID_SCSI}!="1", GOTO="sg3_utils_id_end" IMPORT{program}="/usr/bin/sg_inq --export --page=sn $env{.INQUIRY_DEV}" IMPORT{program}="/usr/bin/sg_inq --export --page=di $env{.INQUIRY_DEV}" LABEL="compat" # scsi_id compat mappings ENV{ID_VENDOR}!="?*", ENV{SCSI_VENDOR}=="?*", ENV{ID_VENDOR}="$env{SCSI_VENDOR}" ENV{ID_VENDOR_ENC}!="?*", ENV{SCSI_VENDOR_ENC}=="?*", ENV{ID_VENDOR_ENC}="$env{SCSI_VENDOR_ENC}" ENV{ID_MODEL}!="?*", ENV{SCSI_MODEL}=="?*", ENV{ID_MODEL}="$env{SCSI_MODEL}" ENV{ID_MODEL_ENC}!="?*", ENV{SCSI_MODEL_ENC}=="?*", ENV{ID_MODEL_ENC}="$env{SCSI_MODEL_ENC}" ENV{ID_REVISION}!="?*", ENV{SCSI_REVISION}=="?*", ENV{ID_REVISION}="$env{SCSI_REVISION}" ENV{ID_TYPE}!="?*", ENV{SCSI_TYPE}=="?*", ENV{ID_TYPE}="$env{SCSI_TYPE}" ENV{ID_TARGET_PORT}!="?*", ENV{SCSI_IDENT_PORT_TARGET_PORT_GROUP}=="?*", \ PROGRAM="/bin/sh -c 'echo $env{SCSI_IDENT_PORT_TARGET_PORT_GROUP} | /bin/sed s/^0x//'", \ ENV{ID_TARGET_PORT}="$result" # ID_WWN compat mapping ENV{SCSI_IDENT_LUN_NAA_REGEXT}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_REGEXT}" ENV{SCSI_IDENT_LUN_NAA_REG}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_REG}" ENV{SCSI_IDENT_LUN_NAA_EXT}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_EXT}" ENV{SCSI_IDENT_LUN_NAA_LOCAL}=="?*", ENV{ID_WWN_WITH_EXTENSION}!="?*", ENV{ID_WWN_WITH_EXTENSION}="0x$env{SCSI_IDENT_LUN_NAA_LOCAL}" # ID_WWN has max 16 characters ENV{ID_WWN_WITH_EXTENSION}=="?*", ENV{ID_WWN}!="?*", \ PROGRAM="/bin/sh -c 'echo $env{ID_WWN_WITH_EXTENSION} | /bin/sed s/^\\\(0x.\\\{1,16\\\}\\\).*/\\1/'", \ ENV{ID_WWN}="$result" # ata_id compatibility ENV{ID_SERIAL}!="?*", ENV{SCSI_IDENT_LUN_ATA}=="?*", ENV{ID_BUS}="ata", ENV{ID_ATA}="1", ENV{ID_SERIAL}="$env{SCSI_IDENT_LUN_ATA}" ENV{ID_SERIAL_SHORT}!="?*", ENV{SCSI_VENDOR}=="ATA", ENV{SCSI_IDENT_LUN_VENDOR}=="?*", ENV{ID_SERIAL_SHORT}="$env{SCSI_IDENT_LUN_VENDOR}" # Compat ID_SERIAL setting ENV{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}" ENV{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}" ENV{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}" ENV{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}" ENV{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}" ENV{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}" ENV{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}" ENV{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}" ENV{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}" # Compat ID_SCSI_SERIAL setting ENV{ID_SCSI_SERIAL}!="?*", ENV{SCSI_IDENT_SERIAL}=="?*", ENV{ID_SCSI_SERIAL}="$env{SCSI_IDENT_SERIAL}" LABEL="sg3_utils_id_end" rules.d/11-dm-lvm.rules 0000444 00000005105 15107240613 0010605 0 ustar 00 # Copyright (C) 2009 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # Udev rules for LVM. # # These rules create symlinks for LVM logical volumes in # /dev/VG directory (VG is an actual VG name). Some udev # environment variables are set (they can be used in later # rules as well): # DM_LV_NAME - logical volume name # DM_VG_NAME - volume group name # DM_LV_LAYER - logical volume layer (blank if not set) # "add" event is processed on coldplug only! ACTION=="remove", GOTO="lvm_end" ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="lvm_end" ENV{DM_UUID}!="LVM-?*", GOTO="lvm_end" # Use DM name and split it up into its VG/LV/layer constituents. IMPORT{program}="/usr/sbin/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}" # DM_SUBSYSTEM_UDEV_FLAG0 is the 'NOSCAN' flag for LVM subsystem. # This flag is used to temporarily disable selected rules to prevent any # processing or scanning done on the LVM volume before LVM has any chance # to zero any stale metadata found within the LV data area. Such stale # metadata could cause false claim of the LV device, keeping it open etc. # # If the NOSCAN flag is present, backup selected existing flags used to # disable rules, then set them firmly so those selected rules are surely skipped. # Restore these flags once the NOSCAN flag is dropped (which is normally any # uevent that follows for this LV, even an artificially generated one). ENV{DM_SUBSYSTEM_UDEV_FLAG0}=="1", ENV{DM_NOSCAN}="1", ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}="$env{DM_UDEV_DISABLE_OTHER_RULES_FLAG}", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" ENV{DM_SUBSYSTEM_UDEV_FLAG0}!="1", IMPORT{db}="DM_NOSCAN", IMPORT{db}="DM_DISABLE_OTHER_RULES_FLAG_OLD" ENV{DM_SUBSYSTEM_UDEV_FLAG0}!="1", ENV{DM_NOSCAN}=="1", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="$env{DM_DISABLE_OTHER_RULES_FLAG_OLD}", \ ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}="", ENV{DM_NOSCAN}="" ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}=="1", GOTO="lvm_end" # Ignore private devices - the ones having any suffix in DM_UUID. Both in udev rules and in systemd. ## FIXME resolve -suffix handling ## ENV{DM_UUID}=="LVM-?*-?*", ENV{SYSTEMD_READY}="0", GOTO="lvm_disable" # Do not create symlinks for inappropriate subdevices. ENV{DM_LV_NAME}=="pvmove?*|?*_vorigin", GOTO="lvm_disable" ENV{DM_LV_LAYER}=="?*", GOTO="lvm_disable" # Create symlinks for top-level devices only. ENV{DM_VG_NAME}=="?*", ENV{DM_LV_NAME}=="?*", SYMLINK+="$env{DM_VG_NAME}/$env{DM_LV_NAME}", GOTO="lvm_end" LABEL="lvm_disable" ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1" ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" OPTIONS:="nowatch" LABEL="lvm_end" rules.d/69-dm-lvm.rules 0000444 00000007111 15107240613 0010621 0 ustar 00 # Copyright (C) 2012,2021 Red Hat, Inc. All rights reserved. # # This file is part of LVM. # # This rule requires blkid to be called on block devices before so only devices # used as LVM PVs are processed (ID_FS_TYPE="LVM2_member"). SUBSYSTEM!="block", GOTO="lvm_end" ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="lvm_end" # Ignore PVs on LVs. # This is usually a case of an LV being used for a guest VM # image, where the guest is using lvm. The host should # ignore lvm data from the guest and not attempt to scan or # activate guest PVs/LVs. (To enable functions in this file # for PVs layered on LVs, set LVM_PVSCAN_ON_LVS="1" from a # custom udev rule.) ENV{ID_FS_TYPE}=="LVM2_member", ENV{DM_UUID}=="LVM-?*", ENV{LVM_PVSCAN_ON_LVS}!="1", GOTO="lvm_end" # Only process devices already marked as a PV - this requires blkid to be called before. ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end" ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end" ACTION=="remove", GOTO="lvm_end" # Create /dev/disk/by-id/lvm-pv-uuid-<PV_UUID> symlink for each PV ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-id/lvm-pv-uuid-$env{ID_FS_UUID_ENC}" # If the PV is a special device listed below, scan only if the device is # properly activated. These devices are not usable after an ADD event, # but they require an extra setup and they are ready after a CHANGE event. # Also support coldplugging with ADD event but only if the device is already # properly activated. # This logic should be eventually moved to rules where those particular # devices are processed primarily (MD and loop). # DM device: KERNEL!="dm-[0-9]*", GOTO="next" ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}=="1", GOTO="lvm_scan" GOTO="lvm_end" # MD device: LABEL="next" KERNEL!="md[0-9]*", GOTO="next" IMPORT{db}="LVM_MD_PV_ACTIVATED" ACTION=="add", ENV{LVM_MD_PV_ACTIVATED}=="1", GOTO="lvm_scan" ACTION=="change", ENV{LVM_MD_PV_ACTIVATED}!="1", TEST=="md/array_state", ENV{LVM_MD_PV_ACTIVATED}="1", GOTO="lvm_scan" ACTION=="add", KERNEL=="md[0-9]*p[0-9]*", GOTO="lvm_scan" GOTO="lvm_end" # Loop device: LABEL="next" KERNEL!="loop[0-9]*", GOTO="next" ACTION=="add", ENV{LVM_LOOP_PV_ACTIVATED}=="1", GOTO="lvm_scan" ACTION=="change", ENV{LVM_LOOP_PV_ACTIVATED}!="1", TEST=="loop/backing_file", ENV{LVM_LOOP_PV_ACTIVATED}="1", GOTO="lvm_scan" GOTO="lvm_end" LABEL="next" ACTION!="add", GOTO="lvm_end" LABEL="lvm_scan" # pvscan will check if this device completes a VG, # i.e. all PVs in the VG are now present with the # arrival of this PV. If so, it prints to stdout: # LVM_VG_NAME_COMPLETE='foo' # # When the VG is complete it can be activated, so # vgchange -aay <vgname> is run. It is run via # systemd since it can take longer to run than # udev wants to block when processing rules. # (if there are hundreds of LVs to activate, # the vgchange can take many seconds.) # # pvscan only reads the single device specified, # and uses temp files under /run/lvm to check if # other PVs in the VG are present. # # If event_activation=0 in lvm.conf, this pvscan # (using checkcomplete) will do nothing, so that # no event-based autoactivation will be happen. # # TODO: adjust the output of vgchange -aay so that # it's better suited to appearing in the journal. IMPORT{program}="/usr/sbin/lvm pvscan --cache --listvg --checkcomplete --vgonline --autoactivation event --udevoutput --journal=output $env{DEVNAME}" ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block --property DefaultDependencies=no --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} /usr/sbin/lvm vgchange -aay --autoactivation event $env{LVM_VG_NAME_COMPLETE}" GOTO="lvm_end" LABEL="lvm_end" rules.d/71-prefixdevname.rules 0000644 00000000623 15107240613 0012256 0 ustar 00 # Do not edit this file, it will be overwritten on updates SUBSYSTEM!="net", GOTO="net_ifnames_prefix_end" ACTION!="add", GOTO="net_ifnames_prefix_end" ATTR{type}!="1", GOTO="net_ifnames_prefix_end" IMPORT{cmdline}="net.ifnames.prefix" ENV{net.ifnames.prefix}!="?*", GOTO="net_ifnames_prefix_end" PROGRAM="/usr/lib/udev/prefixdevname", RESULT=="?*", NAME="$result" LABEL="net_ifnames_prefix_end" rules.d/11-dm-mpath.rules 0000644 00000010730 15107240613 0011122 0 ustar 00 ACTION!="add|change", GOTO="mpath_end" ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="mpath_end" ENV{DM_UUID}!="mpath-?*", GOTO="mpath_end" IMPORT{db}="DM_DISABLE_OTHER_RULES_FLAG_OLD" IMPORT{db}="MPATH_DEVICE_READY" # If this uevent didn't come from dm, don't try to update the # device state ENV{DM_COOKIE}!="?*", ENV{DM_ACTION}!="PATH_*", IMPORT{db}="DM_UDEV_DISABLE_OTHER_RULES_FLAG", IMPORT{db}="DM_NOSCAN", GOTO="scan_import" ENV{.MPATH_DEVICE_READY_OLD}="$env{MPATH_DEVICE_READY}" # multipath sets DM_SUBSYSTEM_UDEV_FLAG2 when it reloads a # table with no active devices. If this happens, mark the # device not ready ENV{DM_SUBSYSTEM_UDEV_FLAG2}=="1", ENV{MPATH_DEVICE_READY}="0",\ GOTO="mpath_action" # If the last path has failed mark the device not ready # Note that DM_NR_VALID_PATHS is only set for PATH_FAILED|PATH_REINSTATED # events. # This may not be reliable, as events aren't necessarily received in order. ENV{DM_NR_VALID_PATHS}=="0", ENV{MPATH_DEVICE_READY}="0", GOTO="mpath_action" ENV{MPATH_SBIN_PATH}="/sbin" TEST!="$env{MPATH_SBIN_PATH}/multipath", ENV{MPATH_SBIN_PATH}="/usr/sbin" # Don't run multipath -U during "coldplug" after switching root, # because paths are just being added to the udev db. ACTION=="add", ENV{.MPATH_DEVICE_READY_OLD}=="1", GOTO="paths_ok" # Check the map state directly with multipath -U. # This doesn't attempt I/O on the device. PROGRAM=="$env{MPATH_SBIN_PATH}/multipath -U -v1 %k", GOTO="paths_ok" ENV{MPATH_DEVICE_READY}="0", GOTO="mpath_action" LABEL="paths_ok" # Don't mark a device ready on a PATH_FAILED event. even if # DM_NR_VALID_PATHS is greater than 0. Just keep the existing # value ENV{DM_ACTION}=="PATH_FAILED", GOTO="mpath_action" # This event is either a PATH_REINSTATED or a table reload where # there are active paths. Mark the device ready ENV{MPATH_DEVICE_READY}="1" LABEL="mpath_action" # DM_SUBSYSTEM_UDEV_FLAG0 is the "RELOAD" flag for multipath subsystem. # Drop the DM_ACTIVATION flag here as mpath reloads tables if any of its # paths are lost/recovered. For any stack above the mpath device, this is not # something that should be reacted upon since it would be useless extra work. # It's exactly mpath's job to provide *seamless* device access to any of the # paths that are available underneath. ENV{DM_SUBSYSTEM_UDEV_FLAG0}=="1", \ ENV{DM_ACTIVATION}="0", ENV{MPATH_UNCHANGED}="1" # For path failed or reinstated events, unset DM_ACTIVATION. # This is similar to the DM_SUBSYSTEM_UDEV_FLAG0 case above. ENV{DM_ACTION}=="PATH_FAILED|PATH_REINSTATED", \ ENV{DM_ACTIVATION}="0", ENV{MPATH_UNCHANGED}="1" # Do not initiate scanning if no path is available, # otherwise there would be a hang or IO error on access. # We'd like to avoid this, especially within udev processing. ENV{MPATH_DEVICE_READY}=="0", ENV{DM_NOSCAN}="1" # Also skip all foreign rules if no path is available. # Remember the original value of DM_DISABLE_OTHER_RULES_FLAG # and restore it back once we have at least one path available. ENV{MPATH_DEVICE_READY}=="0", ENV{.MPATH_DEVICE_READY_OLD}=="1",\ ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}=="",\ ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}="$env{DM_UDEV_DISABLE_OTHER_RULES_FLAG}" ENV{MPATH_DEVICE_READY}=="0", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" ENV{MPATH_DEVICE_READY}!="0", ENV{.MPATH_DEVICE_READY_OLD}=="0",\ ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="$env{DM_DISABLE_OTHER_RULES_FLAG_OLD}",\ ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}="",\ ENV{DM_ACTIVATION}="1", ENV{MPATH_UNCHANGED}="0" # The code to check multipath state ends here. We need to set # properties and symlinks regardless whether the map is usable or # not. If symlinks get lost, systemd may auto-unmount file systems. LABEL="scan_import" ENV{DM_NOSCAN}!="1", GOTO="import_end" IMPORT{db}="ID_FS_TYPE" IMPORT{db}="ID_FS_USAGE" IMPORT{db}="ID_FS_UUID" IMPORT{db}="ID_FS_UUID_ENC" IMPORT{db}="ID_FS_LABEL" IMPORT{db}="ID_FS_LABEL_ENC" IMPORT{db}="ID_FS_VERSION" LABEL="import_end" # Multipath maps should take precedence over their members. ENV{DM_UDEV_LOW_PRIORITY_FLAG}!="1", OPTIONS+="link_priority=50" # Set some additional symlinks that typically exist for mpath # path members, too, and should be overridden. # kpartx_id is very robust, it works for suspended maps and maps # with 0 dependencies. It sets DM_TYPE, DM_PART, DM_WWN TEST=="/usr/lib/udev/kpartx_id", \ IMPORT{program}=="kpartx_id %M %m $env{DM_UUID}" ENV{DM_TYPE}=="?*", ENV{DM_SERIAL}=="?*", \ SYMLINK+="disk/by-id/$env{DM_TYPE}-$env{DM_SERIAL}" ENV{DM_WWN}=="?*", SYMLINK+="disk/by-id/wwn-$env{DM_WWN}" LABEL="mpath_end" rules.d/62-multipath.rules 0000644 00000010675 15107240613 0011440 0 ustar 00 # Set DM_MULTIPATH_DEVICE_PATH if the device should be handled by multipath SUBSYSTEM!="block", GOTO="end_mpath" KERNEL!="sd*|dasd*|nvme*", GOTO="end_mpath" ACTION=="remove", TEST=="/run/multipath/find_multipaths/$major:$minor", \ RUN+="/usr/bin/rm -f /run/multipath/find_multipaths/$major:$minor" ACTION!="add|change", GOTO="end_mpath" IMPORT{cmdline}="nompath" ENV{nompath}=="?*", GOTO="end_mpath" IMPORT{cmdline}="multipath" ENV{multipath}=="off", GOTO="end_mpath" TEST!="/etc/multipath.conf", GOTO="end_mpath" ENV{DEVTYPE}!="partition", GOTO="test_dev" IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH" ENV{DM_MULTIPATH_DEVICE_PATH}=="1", ENV{ID_FS_TYPE}="none", \ ENV{SYSTEMD_READY}="0" GOTO="end_mpath" LABEL="test_dev" ENV{MPATH_SBIN_PATH}="/sbin" TEST!="$env{MPATH_SBIN_PATH}/multipath", ENV{MPATH_SBIN_PATH}="/usr/sbin" # FIND_MULTIPATHS_WAIT_UNTIL is the timeout (in seconds after the # epoch). IMPORT{db}="FIND_MULTIPATHS_WAIT_UNTIL" ENV{.SAVED_FM_WAIT_UNTIL}="$env{FIND_MULTIPATHS_WAIT_UNTIL}" # multipath -u needs to know if this device has ever been exported IMPORT{db}="DM_MULTIPATH_DEVICE_PATH" # multipath -u sets DM_MULTIPATH_DEVICE_PATH and, # if "find_multipaths smart", also FIND_MULTIPATHS_WAIT_UNTIL. IMPORT{program}=="$env{MPATH_SBIN_PATH}/multipath -u %k", \ ENV{.MPATH_CHECK_PASSED}="1" # case 1: this is definitely multipath ENV{DM_MULTIPATH_DEVICE_PATH}=="1", \ ENV{ID_FS_TYPE}="mpath_member", ENV{SYSTEMD_READY}="0", \ GOTO="stop_wait" # case 2: this is definitely not multipath, or timeout has expired ENV{DM_MULTIPATH_DEVICE_PATH}!="2", \ GOTO="stop_wait" # Code below here is only run in "smart" mode. # multipath -u has indicated this is "maybe" multipath. # Note that DM_MULTIPATH_DEVICE_PATH has the value 2 at this point. # This value will never propagate to other rules files, because # it will be reset to 1 in the "pretend_multipath" section below. # This shouldn't happen, just in case. ENV{FIND_MULTIPATHS_WAIT_UNTIL}!="?*", GOTO="end_mpath" # Be careful not to start the timer twice. ACTION!="add", GOTO="pretend_mpath" ENV{.SAVED_FM_WAIT_UNTIL}=="?*", GOTO="pretend_mpath" # At this point, we are seeing this path for the first time, and it's "maybe" multipath. # The actual start command for the timer. # # The purpose of this command is only to make sure we will receive another # uevent eventually. *Any* uevent may cause waiting to finish if it either ends # in case 1-3 above, or if it arrives after FIND_MULTIPATHS_WAIT_UNTIL. # # Note that this will try to activate multipathd if it isn't running yet. # If that fails, the unit starts and expires nonetheless. If multipathd # startup needs to wait for other services, this wait time will add up with # the --on-active timeout. # # We must trigger an "add" event because LVM2 will only act on those. RUN+="/usr/bin/systemd-run --unit=cancel-multipath-wait-$kernel --description 'cancel waiting for multipath siblings of $kernel' --no-block --timer-property DefaultDependencies=no --timer-property Conflicts=shutdown.target --timer-property Before=shutdown.target --timer-property Conflicts=initrd-cleanup.service --timer-property Before=initrd-cleanup.service --timer-property AccuracySec=500ms --property DefaultDependencies=no --property Conflicts=shutdown.target --property Before=shutdown.target --property Conflicts=initrd-cleanup.service --property Before=initrd-cleanup.service --on-active=$env{FIND_MULTIPATHS_WAIT_UNTIL} /usr/bin/udevadm trigger --action=add $sys$devpath" LABEL="pretend_mpath" ENV{DM_MULTIPATH_DEVICE_PATH}="1" ENV{SYSTEMD_READY}="0" GOTO="end_mpath" LABEL="stop_wait" # If timeout hasn't expired but we're not in "maybe" state any more, stop timer # Do this only once, and only if the timer has been started before IMPORT{db}="FIND_MULTIPATHS_WAIT_CANCELLED" ENV{FIND_MULTIPATHS_WAIT_CANCELLED}=="?*", GOTO="end_mpath" ENV{FIND_MULTIPATHS_WAIT_UNTIL}!="?*", GOTO="end_mpath" ENV{FIND_MULTIPATHS_WAIT_UNTIL}=="0", GOTO="end_mpath" ENV{FIND_MULTIPATHS_WAIT_CANCELLED}="1" RUN+="/usr/bin/systemctl stop cancel-multipath-wait-$kernel.timer" # If "multipath -u" failed, no values are imported from the program, # and we are still using the values for DM_MULTIPATH_DEVICE_PATH and # FIND_MULTIPATHS_WAIT_UNTIL that were imported from the database. # If we are in "smart" mode, we need to give up on the path now, # since this may have been the timeout event. Without the imports # from "multipath -u", we can't tell. ENV{.MPATH_CHECK_PASSED}!="?*", ENV{DM_MULTIPATH_DEVICE_PATH}="0" LABEL="end_mpath" rules.d/90-fwupd-devices.rules 0000644 00000000431 15107240613 0012164 0 ustar 00 ######################################################################## # Copyright (C) 2015 Richard Hughes <richard@hughsie.com> # # SPDX-License-Identifier: LGPL-2.1+ # # NVMe hardware SUBSYSTEM=="nvme", ENV{ID_VENDOR_FROM_DATABASE}=="", IMPORT{builtin}="hwdb --subsystem=pci" rules.d/98-kexec.rules 0000644 00000001267 15107240613 0010536 0 ustar 00 SUBSYSTEM=="cpu", ACTION=="add", GOTO="kdump_reload" SUBSYSTEM=="cpu", ACTION=="remove", GOTO="kdump_reload" SUBSYSTEM=="memory", ACTION=="online", GOTO="kdump_reload" SUBSYSTEM=="memory", ACTION=="offline", GOTO="kdump_reload" GOTO="kdump_reload_end" LABEL="kdump_reload" # If kdump is not loaded, calling kdump-udev-throttle will end up # doing nothing, but systemd-run will always generate extra logs for # each call, so trigger the kdump-udev-throttler only if kdump # service is active to avoid unnecessary logs RUN+="/bin/sh -c '/usr/bin/systemctl is-active kdump.service || exit 0; /usr/bin/systemd-run --quiet --no-block /usr/lib/udev/kdump-udev-throttler'" LABEL="kdump_reload_end" rules.d/71-nvmf-netapp.rules 0000644 00000001020 15107240613 0011644 0 ustar 00 # Set appropriate iopolicy for NetApp ONTAP and NetApp E-Series ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="queue-depth" ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp E-Series", ATTR{iopolicy}="round-robin" # Set ctrl_loss_tmo to -1 for NetApp ONTAP NVMe/TCP ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", ATTR{transport}=="tcp", ATTR{model}=="NetApp ONTAP Controller", ATTR{ctrl_loss_tmo}="-1" rules.d/65-scsi-cciss_id.rules 0000644 00000001334 15107240613 0012143 0 ustar 00 # cciss compat rules ACTION!="add|change", GOTO="cciss_compat_end" KERNEL!="sd*", GOTO="cciss_compat_end" ENV{ID_VENDOR}!="HP", ENV{ID_VENDOR}!="COMPAQ", GOTO="cciss_compat_end" ENV{ID_MODEL}!="LOGICAL_VOLUME", GOTO="cciss_compat_end" ENV{DEVTYPE}=="disk", DRIVERS=="hpsa", IMPORT{program}="cciss_id %p" ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*" ENV{ID_CCISS}!="?*", GOTO="cciss_compat_end" ENV{DEVTYPE}=="disk", SYMLINK+="cciss/$env{ID_CCISS}" ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/cciss-$env{ID_SERIAL}" ENV{DEVTYPE}=="partition", SYMLINK+="cciss/$env{ID_CCISS}p%n" ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/cciss-$env{ID_SERIAL}-part%n" LABEL="cciss_compat_end" rules.d/01-md-raid-creating.rules 0000644 00000000501 15107240613 0012514 0 ustar 00 # do not edit this file, it will be overwritten on update # While mdadm is creating an array, it creates a file # /run/mdadm/creating-mdXXX. If that file exists, then # the array is not "ready" and we should make sure the # content is ignored. KERNEL=="md*", TEST=="/run/mdadm/creating-$kernel", ENV{SYSTEMD_READY}="0" rules.d/63-md-raid-arrays.rules 0000644 00000005107 15107240613 0012240 0 ustar 00 # do not edit this file, it will be overwritten on update SUBSYSTEM!="block", GOTO="md_end" # handle md arrays ACTION=="remove", GOTO="md_end" KERNEL!="md*", GOTO="md_end" # partitions have no md/{array_state,metadata_version}, but should not # for that reason be ignored. ENV{DEVTYPE}=="partition", GOTO="md_ignore_state" # container devices have a metadata version of e.g. 'external:ddf' and # never leave state 'inactive' ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" TEST!="md/array_state", ENV{SYSTEMD_READY}="0", GOTO="md_end" ATTR{md/array_state}=="clear*|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end" ATTR{md/sync_action}=="reshape", ENV{RESHAPE_ACTIVE}="yes" LABEL="md_ignore_state" IMPORT{program}="/usr/sbin/mdadm --detail --no-devices --export $devnode" ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" IMPORT{builtin}="blkid" OPTIONS+="link_priority=100" OPTIONS+="watch" ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}" ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" ENV{MD_LEVEL}=="raid[1-9]*", ENV{SYSTEMD_WANTS}+="mdmonitor.service" # Tell systemd to run mdmon for our container, if we need it. ENV{MD_LEVEL}=="raid[1-9]*", ENV{MD_CONTAINER}=="?*", PROGRAM="/usr/bin/readlink $env{MD_CONTAINER}", ENV{MD_MON_THIS}="%c" ENV{MD_MON_THIS}=="?*", TEST=="/etc/initrd-release", PROGRAM="/usr/bin/basename $env{MD_MON_THIS}", ENV{SYSTEMD_WANTS}+="mdmon@initrd-%c.service" ENV{MD_MON_THIS}=="?*", TEST!="/etc/initrd-release", PROGRAM="/usr/bin/basename $env{MD_MON_THIS}", ENV{SYSTEMD_WANTS}+="mdmon@%c.service" ENV{RESHAPE_ACTIVE}=="yes", PROGRAM="/usr/bin/basename $env{MD_MON_THIS}", ENV{SYSTEMD_WANTS}+="mdadm-grow-continue@%c.service" LABEL="md_end" rules.d/64-md-raid-assembly.rules 0000644 00000004506 15107240613 0012561 0 ustar 00 # do not edit this file, it will be overwritten on update # Don't process any events if anaconda is running as anaconda brings up # raid devices manually ENV{ANACONDA}=="?*", GOTO="md_inc_end" # assemble md arrays # Also don't process disks that are slated to be a multipath device ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="md_inc_end" SUBSYSTEM!="block", GOTO="md_inc_end" # skip non-initialized devices ENV{SYSTEMD_READY}=="0", GOTO="md_inc_end" # handle potential components of arrays (the ones supported by md) # For member devices which are md/dm devices, we don't need to # handle add event. Because md/dm devices need to do some init jobs. # Then the change event happens. # When adding md/dm devices, ID_FS_TYPE can only be linux_raid_member # after change event happens. ENV{ID_FS_TYPE}=="linux_raid_member", GOTO="md_inc" # "noiswmd" on kernel command line stops mdadm from handling # "isw" (aka IMSM - Intel RAID). # "nodmraid" on kernel command line stops mdadm from handling # "isw" or "ddf". IMPORT{cmdline}="noiswmd" IMPORT{cmdline}="nodmraid" ENV{nodmraid}=="?*", GOTO="md_inc_end" ENV{ID_FS_TYPE}=="ddf_raid_member", GOTO="md_inc" ENV{noiswmd}=="?*", GOTO="md_inc_end" ENV{ID_FS_TYPE}=="isw_raid_member", ACTION!="change", GOTO="md_inc" GOTO="md_inc_end" LABEL="md_inc" # Make sure we don't handle dm devices when some limits are set. # And linux_raid_member only be set when change/remove event happen. # So we don't need to consider add event here. KERNEL=="dm-*", ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="md_inc_end" KERNEL=="dm-*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="md_inc_end" KERNEL=="dm-*", ENV{DM_SUSPENDED}=="1", GOTO="md_inc_end" # Bare disks are ready when add event happens, the raid can be assembled. ACTION=="change", KERNEL!="dm-*|md*", GOTO="md_inc_end" # remember you can limit what gets auto/incrementally assembled by # mdadm.conf(5)'s 'AUTO' and selectively whitelist using 'ARRAY' ACTION!="remove", IMPORT{program}="/usr/sbin/mdadm --incremental --export $devnode --offroot $env{DEVLINKS}" ACTION!="remove", ENV{MD_STARTED}=="*unsafe*", ENV{MD_FOREIGN}=="no", ENV{SYSTEMD_WANTS}+="mdadm-last-resort@$env{MD_DEVICE}.timer" ACTION=="remove", ENV{ID_PATH}=="?*", RUN+="/usr/sbin/mdadm -If $devnode --path $env{ID_PATH}" ACTION=="remove", ENV{ID_PATH}!="?*", RUN+="/usr/sbin/mdadm -If $devnode" LABEL="md_inc_end" rules.d/66-md-auto-readd.rules 0000644 00000001577 15107240613 0012061 0 ustar 00 # # Enable/Disable - default is Disabled # to disable this rule, GOTO="md_end" should be the first active command. # to enable this rule, Comment out GOTO="md_end". GOTO="md_end" # Required: MD arrays must have a bitmap for transient devices to # be added back in the array. # mdadm -CR /dev/md0 -l1 -n2 /dev/sd[ab] –bitmap=internal # Don't process any events if anaconda is running as anaconda brings up # raid devices manually ENV{ANACONDA}=="?*", GOTO="md_end" # Also don't process disks that are slated to be a multipath device ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="md_end" # We process add events on block devices (since they are ready as soon as # they are added to the system) ACTION!="add", GOTO="md_end" ENV{ID_FS_TYPE}!="linux_raid_member", GOTO="md_end" SUBSYSTEM=="block", RUN{program}+="/usr/sbin/md-auto-readd.sh $devnode" # # Land here to exit cleanly LABEL="md_end" rules.d/69-md-clustered-confirm-device.rules 0000644 00000001532 15107240613 0014710 0 ustar 00 # do not edit this file, it will be overwritten on update SUBSYSTEM!="block", GOTO="clustermd_end" # handle md arrays KERNEL!="md*", GOTO="clustermd_end" ENV{DEVTYPE}!="disk", GOTO="clustermd_end" ACTION!="change", GOTO="clustermd_end" ENV{EVENT}!="ADD_DEVICE", GOTO="clustermd_end" ENV{DEVICE_UUID}!="?*", GOTO="clustermd_end" ENV{RAID_DISK}!="?*", GOTO="clustermd_end" # Based on the received UUID, node confirms the device if # it is found by blkid, otherwise the node reports it is # missing. PROGRAM="/usr/sbin/blkid -o device -t UUID_SUB=$env{DEVICE_UUID}", ENV{.md.newdevice} = "$result" ENV{.md.newdevice}!="", RUN+="/usr/sbin/mdadm --manage $env{DEVNAME} --cluster-confirm $env{RAID_DISK}:$env{.md.newdevice}" ENV{.md.newdevice}=="", RUN+="/usr/sbin/mdadm --manage $env{DEVNAME} --cluster-confirm $env{RAID_DISK}:missing" LABEL="clustermd_end" rules.d/40-usb_modeswitch.rules 0000644 00000123555 15107240613 0012446 0 ustar 00 # Part of usb-modeswitch-data, version 20191128 # # Works with usb_modeswitch versions >= 2.4.0. Slash before %k parameter # is for compatibility only. Versions >= 2.5.0 don't need it. # ACTION!="add|change", GOTO="modeswitch_rules_end" # Adds a symlink "gsmmodem[n]" to the lowest ttyUSB port with interrupt # transfer; checked against a list of known modems, or else no action KERNEL=="ttyUSB*", ATTRS{bNumConfigurations}=="*", PROGRAM="usb_modeswitch --symlink-name %p %s{idVendor} %s{idProduct} %E{PRODUCT}", SYMLINK+="%c" SUBSYSTEM!="usb", ACTION!="add",, GOTO="modeswitch_rules_end" # Generic entry for most Huawei devices, excluding Android phones ATTRS{idVendor}=="12d1", ATTRS{manufacturer}!="Android", ATTR{bInterfaceNumber}=="00", ATTR{bInterfaceClass}=="08", RUN+="usb_modeswitch '%b/%k'" # HP LaserJet Professional P1102 ATTR{idVendor}=="03f0", ATTR{idProduct}=="002a", RUN+="usb_modeswitch '/%k'" # HP LaserJet Professional P1102w ATTR{idVendor}=="03f0", ATTR{idProduct}=="032a", RUN+="usb_modeswitch '/%k'" # HP lt4220 NGFF Card ATTR{idVendor}=="03f0", ATTR{idProduct}=="0857", RUN+="usb_modeswitch '/%k'" # HP un2430 ATTR{idVendor}=="03f0", ATTR{idProduct}=="371d", RUN+="usb_modeswitch '/%k'" # HP hs2434 ATTR{idVendor}=="03f0", ATTR{idProduct}=="4b1d", RUN+="usb_modeswitch '/%k'" # HP lt4111 ATTR{idVendor}=="03f0", ATTR{idProduct}=="4e1d", RUN+="usb_modeswitch '/%k'" # HP hs3110 ATTR{idVendor}=="03f0", ATTR{idProduct}=="521d", RUN+="usb_modeswitch '/%k'" # HP hs3120 ATTR{idVendor}=="03f0", ATTR{idProduct}=="531d", RUN+="usb_modeswitch '/%k'" # HP hs3114 ATTR{idVendor}=="03f0", ATTR{idProduct}=="541d", RUN+="usb_modeswitch '/%k'" # HP hs4112 ATTR{idVendor}=="03f0", ATTR{idProduct}=="581d", RUN+="usb_modeswitch '/%k'" # HP lt4225 ATTR{idVendor}=="03f0", ATTR{idProduct}=="631d", RUN+="usb_modeswitch '/%k'" # HP lt4226 ATTR{idVendor}=="03f0", ATTR{idProduct}=="641d", RUN+="usb_modeswitch '/%k'" # HP lt4227 ATTR{idVendor}=="03f0", ATTR{idProduct}=="681d", RUN+="usb_modeswitch '/%k'" # HP lt4211 ATTR{idVendor}=="03f0", ATTR{idProduct}=="911d", RUN+="usb_modeswitch '/%k'" # HP lt4110 ATTR{idVendor}=="03f0", ATTR{idProduct}=="931d", RUN+="usb_modeswitch '/%k'" # HP lt4114 ATTR{idVendor}=="03f0", ATTR{idProduct}=="9a1d", RUN+="usb_modeswitch '/%k'" # HP lt4120 ATTR{idVendor}=="03f0", ATTR{idProduct}=="9d1d", RUN+="usb_modeswitch '/%k'" # HP lt4132 ATTR{idVendor}=="03f0", ATTR{idProduct}=="a31d", RUN+="usb_modeswitch '/%k'" # Quanta MU-Q101 ATTR{idVendor}=="0408", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # Quanta 1KR / USB-lte 7410 ATTR{idVendor}=="0408", ATTR{idProduct}=="ea17", RUN+="usb_modeswitch '/%k'" # Quanta 1K3 LTE ATTR{idVendor}=="0408", ATTR{idProduct}=="ea25", RUN+="usb_modeswitch '/%k'" # Quanta MobileGenie 4G LTE, Quanta 1K6 ATTR{idVendor}=="0408", ATTR{idProduct}=="ea43", RUN+="usb_modeswitch '/%k'" # MU-Q110, Yota Router (Quanta 1QDLZZZ0ST2) ATTR{idVendor}=="0408", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # SpeedUp SU-8500U ATTR{idVendor}=="0408", ATTR{idProduct}=="f001", RUN+="usb_modeswitch '/%k'" # Nokia CS-10 ATTR{idVendor}=="0421", ATTR{idProduct}=="060c", RUN+="usb_modeswitch '/%k'" # Nokia CS-15 ATTR{idVendor}=="0421", ATTR{idProduct}=="0610", RUN+="usb_modeswitch '/%k'" # Nokia CS-12 ATTR{idVendor}=="0421", ATTR{idProduct}=="0618", RUN+="usb_modeswitch '/%k'" # Nokia CS-11 ATTR{idVendor}=="0421", ATTR{idProduct}=="061d", RUN+="usb_modeswitch '/%k'" # Nokia CS-17 ATTR{idVendor}=="0421", ATTR{idProduct}=="0622", RUN+="usb_modeswitch '/%k'" # Nokia CS-18 ATTR{idVendor}=="0421", ATTR{idProduct}=="0627", RUN+="usb_modeswitch '/%k'" # Nokia CS-19 ATTR{idVendor}=="0421", ATTR{idProduct}=="062c", RUN+="usb_modeswitch '/%k'" # Nokia CS-7M-01 ATTR{idVendor}=="0421", ATTR{idProduct}=="0632", RUN+="usb_modeswitch '/%k'" # Nokia CS-21M-02 ATTR{idVendor}=="0421", ATTR{idProduct}=="0637", RUN+="usb_modeswitch '/%k'" # Logitech G920 Racing Wheel ATTR{idVendor}=="046d", ATTR{idProduct}=="c261", RUN+="usb_modeswitch '/%k'" # Philips (?), Vodafone MD950 (Wisue Technology) ATTR{idVendor}=="0471", ATTR{idProduct}=="1210", RUN+="usb_modeswitch '/%k'" # Philips TalkTalk (NXP Semiconductors "Dragonfly") ATTR{idVendor}=="0471", ATTR{idProduct}=="1237", RUN+="usb_modeswitch '/%k'" # Kyocera W06K CDMA modem ATTR{idVendor}=="0482", ATTR{idProduct}=="024d", RUN+="usb_modeswitch '/%k'" # I-O Data WMX2-U Wimax ATTR{idVendor}=="04bb", ATTR{idProduct}=="bccd", RUN+="usb_modeswitch '/%k'" # Alcatel-Lucent ABS-T920 ATTR{idVendor}=="04cc", ATTR{idProduct}=="2251", RUN+="usb_modeswitch '/%k'" # Alcatel-Lucent T930S ATTR{idVendor}=="04cc", ATTR{idProduct}=="225c", RUN+="usb_modeswitch '/%k'" # Nexperia TM TD-SCDMA ATTR{idVendor}=="04cc", ATTR{idProduct}=="226e", RUN+="usb_modeswitch '/%k'" # Nexperia TM TD-SCDMA (Variant) ATTR{idVendor}=="04cc", ATTR{idProduct}=="226f", RUN+="usb_modeswitch '/%k'" # Samsung GT-B1110 ATTR{idVendor}=="04e8", ATTR{idProduct}=="680c", RUN+="usb_modeswitch '/%k'" # Samsung GT-B3730 ATTR{idVendor}=="04e8", ATTR{idProduct}=="689a", RUN+="usb_modeswitch '/%k'" # Samsung U209 ATTR{idVendor}=="04e8", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Sunplus Techn. SU-3200U ATTR{idVendor}=="04fc", ATTR{idProduct}=="2140", RUN+="usb_modeswitch '/%k'" # AVM Fritz!Wlan USB Stick N v2 ATTR{idVendor}=="057c", ATTR{idProduct}=="62ff", RUN+="usb_modeswitch '/%k'" # AVM Fritz!Wlan USB Stick N ATTR{idVendor}=="057c", ATTR{idProduct}=="84ff", RUN+="usb_modeswitch '/%k'" # ZyXel WAH1004/WAH3004 ATTR{idVendor}=="0586", ATTR{idProduct}=="2030", RUN+="usb_modeswitch '/%k'" # Axesstel Modems (w/ initial idProduct 0x0010) ATTR{idVendor}=="05c6", ATTR{idProduct}=="0010", RUN+="usb_modeswitch '/%k'" # Samsung SGH-Z810, Option GlobeTrotter GX0201 and many other devices ATTR{idVendor}=="05c6", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # Various USB modems ATTR{idVendor}=="05c6", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '/%k'" # D-Link DWM-162-U5, DWM-162 C1, Micromax MMX 300c ATTR{idVendor}=="05c6", ATTR{idProduct}=="2001", RUN+="usb_modeswitch '/%k'" # AnyDATA APE-540H ATTR{idVendor}=="05c6", ATTR{idProduct}=="6503", RUN+="usb_modeswitch '/%k'" # Alcatel-sbell ASB TL131 TD-LTE ATTR{idVendor}=="05c6", ATTR{idProduct}=="9024", RUN+="usb_modeswitch '/%k'" # U901 (LTE modem) ATTR{idVendor}=="05c6", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '/%k'" # Siptune LM-75 ("LinuxModem"), EWangshikong 4G ATTR{idVendor}=="05c6", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Qtronix EVDO 3G Modem (for TianYi) ATTR{idVendor}=="05c7", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # ZE-3G 7.2Mbs HSPA modem ATTR{idVendor}=="0685", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '/%k'" # InfoCert Business Key (SmartCard/Reader emulation) ATTR{idVendor}=="072f", ATTR{idProduct}=="100d", RUN+="usb_modeswitch '/%k'" # D-Link DWM-156 HSUPA 3.75G a.o. ATTR{idVendor}=="07d1", ATTR{idProduct}=="a800", RUN+="usb_modeswitch '/%k'" # D-Link DWM-156 HSUPA 3.75G USB Modem ATTR{idVendor}=="07d1", ATTR{idProduct}=="a804", RUN+="usb_modeswitch '/%k'" # D-Link DWM-151 A1 ATTR{idVendor}=="07d1", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Netgear AirCard 779S ATTR{idVendor}=="0846", ATTR{idProduct}=="0fff", RUN+="usb_modeswitch '/%k'" # Dymo LabelManager ATTR{idVendor}=="0922", ATTR{idProduct}=="1001", RUN+="usb_modeswitch '/%k'" # Dymo LabelManager 420P ATTR{idVendor}=="0922", ATTR{idProduct}=="1003", RUN+="usb_modeswitch '/%k'" # Dymo LabelManager Wireless PnP ATTR{idVendor}=="0922", ATTR{idProduct}=="1007", RUN+="usb_modeswitch '/%k'" # Toshiba G450 ATTR{idVendor}=="0930", ATTR{idProduct}=="0d46", RUN+="usb_modeswitch '/%k'" # Zydas ZD1211RW WLAN USB, Sphairon HomeLink 1202 (Variant 1) ATTR{idVendor}=="0ace", ATTR{idProduct}=="2011", RUN+="usb_modeswitch '/%k'" # Zydas ZD1211RW WLAN USB, Sphairon HomeLink 1202 (Variant 2) ATTR{idVendor}=="0ace", ATTR{idProduct}=="20ff", RUN+="usb_modeswitch '/%k'" # Option iCon 711 ATTR{idVendor}=="0af0", ATTR{idProduct}=="4007", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6711", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6731", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6751", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6771", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6791", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6811", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6911", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6951", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="6971", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7011", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7031", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7051", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7071", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7111", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7211", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7251", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7271", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7301", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7311", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7361", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7381", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7401", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7501", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7601", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7701", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7706", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7801", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7901", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="7a01", RUN+="usb_modeswitch '/%k'" # Option iCon 461 ATTR{idVendor}=="0af0", ATTR{idProduct}=="7a05", RUN+="usb_modeswitch '/%k'" # Option Globetrotter (Variant) ATTR{idVendor}=="0af0", ATTR{idProduct}=="8006", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8200", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8201", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8300", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8302", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8304", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8400", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8600", RUN+="usb_modeswitch '/%k'" # Option GI0643 (aka XYFI) ATTR{idVendor}=="0af0", ATTR{idProduct}=="8700", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8800", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="8900", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="9000", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="9200", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="c031", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="c100", RUN+="usb_modeswitch '/%k'" # Option GlobeTrotter GI1515 ATTR{idVendor}=="0af0", ATTR{idProduct}=="d001", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d013", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d031", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d033", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d035", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d055", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d057", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d058", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d155", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d157", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d255", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d257", RUN+="usb_modeswitch '/%k'" # Option HSO device ATTR{idVendor}=="0af0", ATTR{idProduct}=="d357", RUN+="usb_modeswitch '/%k'" # Olivetti Olicard 100 and others ATTR{idVendor}=="0b3c", ATTR{idProduct}=="c700", RUN+="usb_modeswitch '/%k'" # Olivetti Olicard 145, 155 ATTR{idVendor}=="0b3c", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Olivetti Olicard 160 ATTR{idVendor}=="0b3c", ATTR{idProduct}=="f00c", RUN+="usb_modeswitch '/%k'" # Olivetti Olicard 500 ATTR{idVendor}=="0b3c", ATTR{idProduct}=="f017", RUN+="usb_modeswitch '/%k'" # D-Link DWA-171 Wifi Dongle ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="usb_modeswitch '/%k'" # Ericsson F5521gw ATTR{idVendor}=="0bdb", ATTR{idProduct}=="190d", RUN+="usb_modeswitch '/%k'" # Ericsson F5521gw (Variant) ATTR{idVendor}=="0bdb", ATTR{idProduct}=="1910", RUN+="usb_modeswitch '/%k'" # Atheros Wireless / Netgear WNDA3200 ATTR{idVendor}=="0cf3", ATTR{idProduct}=="20ff", RUN+="usb_modeswitch '/%k'" # Kobil mIdentity 3G (1) ATTR{idVendor}=="0d46", ATTR{idProduct}=="45a1", RUN+="usb_modeswitch '/%k'" # Kobil mIdentity 3G (2) ATTR{idVendor}=="0d46", ATTR{idProduct}=="45a5", RUN+="usb_modeswitch '/%k'" # Mobile Action ("Smart Cable") ATTR{idVendor}=="0df7", ATTR{idProduct}=="0800", RUN+="usb_modeswitch '/%k'" # MediaTek/Medion S4222 and probably others, MediaTek MT6276M and others ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0002", RUN+="usb_modeswitch '/%k'" # COMFAST CF-WU782AC WiFi Dongle ATTR{idVendor}=="0e8d", ATTR{idProduct}=="2870", RUN+="usb_modeswitch '/%k'" # MediaTek Wimax USB Card ATTR{idVendor}=="0e8d", ATTR{idProduct}=="7109", RUN+="usb_modeswitch '/%k'" # BlackBerry Q10 and Z10 ATTR{idVendor}=="0fca", ATTR{idProduct}=="8020", RUN+="usb_modeswitch '/%k'" # Sony Ericsson MD300 ATTR{idVendor}=="0fce", ATTR{idProduct}=="d0cf", RUN+="usb_modeswitch '/%k'" # Sony Ericsson EC400 ATTR{idVendor}=="0fce", ATTR{idProduct}=="d0df", RUN+="usb_modeswitch '/%k'" # Sony Ericsson MD400 ATTR{idVendor}=="0fce", ATTR{idProduct}=="d0e1", RUN+="usb_modeswitch '/%k'" # Sony Ericsson MD400G ATTR{idVendor}=="0fce", ATTR{idProduct}=="d103", RUN+="usb_modeswitch '/%k'" # GW D301 (Advinne AMC) ATTR{idVendor}=="0fd1", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # LG LDU-1900D EV-DO (Rev. A) ATTR{idVendor}=="1004", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # LG HDM-2100 (EVDO Rev.A USB modem) ATTR{idVendor}=="1004", ATTR{idProduct}=="607f", RUN+="usb_modeswitch '/%k'" # LG L-02A ATTR{idVendor}=="1004", ATTR{idProduct}=="610c", RUN+="usb_modeswitch '/%k'" # LG L-05A ATTR{idVendor}=="1004", ATTR{idProduct}=="613a", RUN+="usb_modeswitch '/%k'" # LG LUU-2100TI (aka AT&T USBConnect Turbo) ATTR{idVendor}=="1004", ATTR{idProduct}=="613f", RUN+="usb_modeswitch '/%k'" # LG L-07A ATTR{idVendor}=="1004", ATTR{idProduct}=="614e", RUN+="usb_modeswitch '/%k'" # LG LUU-2110TI ATTR{idVendor}=="1004", ATTR{idProduct}=="6156", RUN+="usb_modeswitch '/%k'" # LG AD600 ATTR{idVendor}=="1004", ATTR{idProduct}=="6190", RUN+="usb_modeswitch '/%k'" # LG L-02C LTE ATTR{idVendor}=="1004", ATTR{idProduct}=="61dd", RUN+="usb_modeswitch '/%k'" # LG SD711 ATTR{idVendor}=="1004", ATTR{idProduct}=="61e7", RUN+="usb_modeswitch '/%k'" # LG L-08C (NTT docomo) ATTR{idVendor}=="1004", ATTR{idProduct}=="61eb", RUN+="usb_modeswitch '/%k'" # LG L-03D LTE/3G ATTR{idVendor}=="1004", ATTR{idProduct}=="6327", RUN+="usb_modeswitch '/%k'" # UTStarcom UM175 (distributor "Alltel") ATTR{idVendor}=="106c", ATTR{idProduct}=="3b03", RUN+="usb_modeswitch '/%k'" # Pantech / UTStarcom UMW190 (Verizon) ATTR{idVendor}=="106c", ATTR{idProduct}=="3b05", RUN+="usb_modeswitch '/%k'" # UTStarcom UM185E (distributor "Alltel") ATTR{idVendor}=="106c", ATTR{idProduct}=="3b06", RUN+="usb_modeswitch '/%k'" # Pantech UML290 ATTR{idVendor}=="106c", ATTR{idProduct}=="3b11", RUN+="usb_modeswitch '/%k'" # Option Beemo / Pantech P4200 LTE ATTR{idVendor}=="106c", ATTR{idProduct}=="3b14", RUN+="usb_modeswitch '/%k'" # Sagem F@ST 9520-35-GLR ATTR{idVendor}=="1076", ATTR{idProduct}=="7f40", RUN+="usb_modeswitch '/%k'" # Hisense E910 EVDO Phone ATTR{idVendor}=="109b", ATTR{idProduct}=="f009", RUN+="usb_modeswitch '/%k'" # Pantech/Verizon UML295 ATTR{idVendor}=="10a9", ATTR{idProduct}=="606f", RUN+="usb_modeswitch '/%k'" # Pantech LTE Modem ATTR{idVendor}=="10a9", ATTR{idProduct}=="6080", RUN+="usb_modeswitch '/%k'" # Sierra devices (specific driver) ATTR{idVendor}=="1199", ATTR{idProduct}=="0fff", RUN+="usb_modeswitch '/%k'" # Sierra MC8305 ATTR{idVendor}=="1199", ATTR{idProduct}=="9011", RUN+="usb_modeswitch '/%k'" # Sierra MC8355 ATTR{idVendor}=="1199", ATTR{idProduct}=="9013", RUN+="usb_modeswitch '/%k'" # Sierra MC8355 Variant ATTR{idVendor}=="1199", ATTR{idProduct}=="9017", RUN+="usb_modeswitch '/%k'" # Sierra MC7770 ATTR{idVendor}=="1199", ATTR{idProduct}=="901b", RUN+="usb_modeswitch '/%k'" # Sierra EM7700 ATTR{idVendor}=="1199", ATTR{idProduct}=="901c", RUN+="usb_modeswitch '/%k'" # Sierra EM7355 ATTR{idVendor}=="1199", ATTR{idProduct}=="901f", RUN+="usb_modeswitch '/%k'" # Sierra EM7305 ATTR{idVendor}=="1199", ATTR{idProduct}=="9041", RUN+="usb_modeswitch '/%k'" # Sierra AC340U ATTR{idVendor}=="1199", ATTR{idProduct}=="9051", RUN+="usb_modeswitch '/%k'" # Sierra AC770S ATTR{idVendor}=="1199", ATTR{idProduct}=="9053", RUN+="usb_modeswitch '/%k'" # Sierra EM7305 ATTR{idVendor}=="1199", ATTR{idProduct}=="9063", RUN+="usb_modeswitch '/%k'" # Digicom 8E4455 (and all Pirelli devices - EXPERIMENTAL) ATTR{idVendor}=="1266", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # Huawei ME909u-521 (MBIM, dummy config) ATTR{idVendor}=="12d1", ATTR{idProduct}=="1573", RUN+="usb_modeswitch '/%k'" # Huawei ME906, ME909 (MBIM, dummy config) ATTR{idVendor}=="12d1", ATTR{idProduct}=="15c1", RUN+="usb_modeswitch '/%k'" # Cisco AM10 "Valet Connector" ATTR{idVendor}=="1307", ATTR{idProduct}=="1169", RUN+="usb_modeswitch '/%k'" # Novatel Wireless devices ATTR{idVendor}=="1410", ATTR{idProduct}=="5010", RUN+="usb_modeswitch '/%k'" # Novatel MC990D ATTR{idVendor}=="1410", ATTR{idProduct}=="5020", RUN+="usb_modeswitch '/%k'" # Novatel MC996D ATTR{idVendor}=="1410", ATTR{idProduct}=="5023", RUN+="usb_modeswitch '/%k'" # Novatel U760 ATTR{idVendor}=="1410", ATTR{idProduct}=="5030", RUN+="usb_modeswitch '/%k'" # Novatel MC760 3G ATTR{idVendor}=="1410", ATTR{idProduct}=="5031", RUN+="usb_modeswitch '/%k'" # Novatel Generic MiFi 2352 / Vodafone MiFi 2352 ATTR{idVendor}=="1410", ATTR{idProduct}=="5041", RUN+="usb_modeswitch '/%k'" # Novatel MiFi 4082 ATTR{idVendor}=="1410", ATTR{idProduct}=="5055", RUN+="usb_modeswitch '/%k'" # Novatel Wireless MC545 HSPA, U679 LTE ATTR{idVendor}=="1410", ATTR{idProduct}=="5059", RUN+="usb_modeswitch '/%k'" # Novatel Generic MiFi 2372 / Vodafone MiFi 2372 ATTR{idVendor}=="1410", ATTR{idProduct}=="7001", RUN+="usb_modeswitch '/%k'" # Novatel U620L ATTR{idVendor}=="1410", ATTR{idProduct}=="9020", RUN+="usb_modeswitch '/%k'" # Novatel USB730L ATTR{idVendor}=="1410", ATTR{idProduct}=="9030", RUN+="usb_modeswitch '/%k'" # Novatel MiFi 6620L ATTR{idVendor}=="1410", ATTR{idProduct}=="b00c", RUN+="usb_modeswitch '/%k'" # Sequans SQN1210/SQN1220 (generic chipsets) ATTR{idVendor}=="148e", ATTR{idProduct}=="a000", RUN+="usb_modeswitch '/%k'" # Motorola 802.11 bg WLAN (TER/GUSB3-E) ATTR{idVendor}=="148f", ATTR{idProduct}=="2578", RUN+="usb_modeswitch '/%k'" # RaLink MT7601U ATTR{idVendor}=="148f", ATTR{idProduct}=="2878", RUN+="usb_modeswitch '/%k'" # China TeleCom CBP7.0 ATTR{idVendor}=="15eb", ATTR{idProduct}=="7153", RUN+="usb_modeswitch '/%k'" # Abit AK-020 ATTR{idVendor}=="15eb", ATTR{idProduct}=="a403", RUN+="usb_modeswitch '/%k'" # Amoi H-01 ATTR{idVendor}=="1614", ATTR{idProduct}=="0800", RUN+="usb_modeswitch '/%k'" # Amoi H-02 ATTR{idVendor}=="1614", ATTR{idProduct}=="0802", RUN+="usb_modeswitch '/%k'" # KuWfi 4g LTE ATTR{idVendor}=="161c", ATTR{idProduct}=="f010", RUN+="usb_modeswitch '/%k'" # Anydata ADU-890WH ATTR{idVendor}=="16d5", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # C-motech CHU-628S ATTR{idVendor}=="16d8", ATTR{idProduct}=="6281", RUN+="usb_modeswitch '/%k'" # C-motech D-50 (aka "CDU-680", "CNU-680") ATTR{idVendor}=="16d8", ATTR{idProduct}=="6803", RUN+="usb_modeswitch '/%k'" # C-motech CDU-685a ATTR{idVendor}=="16d8", ATTR{idProduct}=="6804", RUN+="usb_modeswitch '/%k'" # C-motech CHU-629S ATTR{idVendor}=="16d8", ATTR{idProduct}=="700a", RUN+="usb_modeswitch '/%k'" # C-motech CHU-629S (Variant) ATTR{idVendor}=="16d8", ATTR{idProduct}=="700b", RUN+="usb_modeswitch '/%k'" # C-motech CGU-628 (aka "Franklin Wireless CGU-628A" aka "4G Systems XS Stick W12") ATTR{idVendor}=="16d8", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Axesstel MV210 ATTR{idVendor}=="1726", ATTR{idProduct}=="1900", RUN+="usb_modeswitch '/%k'" # Axesstel MU130 ATTR{idVendor}=="1726", ATTR{idProduct}=="f00e", RUN+="usb_modeswitch '/%k'" # Spreadtrum SC7702 ATTR{idVendor}=="1782", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" # Spreadtrum SC7702 (Variant) ATTR{idVendor}=="1782", ATTR{idProduct}=="0023", RUN+="usb_modeswitch '/%k'" # JOA Telecom LM-700r ATTR{idVendor}=="198a", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" # Beceem BCSM250 ATTR{idVendor}=="198f", ATTR{idProduct}=="bccd", RUN+="usb_modeswitch '/%k'" # ZTE MU351 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" # ZTE AC581 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0026", RUN+="usb_modeswitch '/%k'" # ZTE MF636DB ATTR{idVendor}=="19d2", ATTR{idProduct}=="0033", RUN+="usb_modeswitch '/%k'" # Vodafone (ZTE) K2525 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0040", RUN+="usb_modeswitch '/%k'" # ZTE MF110 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="0053", RUN+="usb_modeswitch '/%k'" # ZTE MF110 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="0083", RUN+="usb_modeswitch '/%k'" # ZTE MU330 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0090", RUN+="usb_modeswitch '/%k'" # Vodafone (ZTE) K4505-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="0101", RUN+="usb_modeswitch '/%k'" # ZTE MF112 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0103", RUN+="usb_modeswitch '/%k'" # ZTE MF637 (Variant for Orange France) ATTR{idVendor}=="19d2", ATTR{idProduct}=="0110", RUN+="usb_modeswitch '/%k'" # ZTE MF651 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0115", RUN+="usb_modeswitch '/%k'" # ZTE MF652 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="0146", RUN+="usb_modeswitch '/%k'" # ZTE MF190 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="0149", RUN+="usb_modeswitch '/%k'" # ZTE MF656A, MF668A, MF669 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0150", RUN+="usb_modeswitch '/%k'" # ZTE MF190 (Variant) and others ATTR{idVendor}=="19d2", ATTR{idProduct}=="0154", RUN+="usb_modeswitch '/%k'" # ZTE MF820 4G LTE ATTR{idVendor}=="19d2", ATTR{idProduct}=="0166", RUN+="usb_modeswitch '/%k'" # ZTE A371B ATTR{idVendor}=="19d2", ATTR{idProduct}=="0169", RUN+="usb_modeswitch '/%k'" # ZTE MF820s, MF832s ATTR{idVendor}=="19d2", ATTR{idProduct}=="0198", RUN+="usb_modeswitch '/%k'" # Onda MT8205 LTE ATTR{idVendor}=="19d2", ATTR{idProduct}=="0266", RUN+="usb_modeswitch '/%k'" # ZTE MF821D (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="0304", RUN+="usb_modeswitch '/%k'" # ZTE MF821D/MF826 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0318", RUN+="usb_modeswitch '/%k'" # ZTE MF821D ATTR{idVendor}=="19d2", ATTR{idProduct}=="0325", RUN+="usb_modeswitch '/%k'" # ZTE MF90 Mobile Hotspot ATTR{idVendor}=="19d2", ATTR{idProduct}=="0388", RUN+="usb_modeswitch '/%k'" # Telewell TW-LTE 4G ATTR{idVendor}=="19d2", ATTR{idProduct}=="0413", RUN+="usb_modeswitch '/%k'" # Vodafone (ZTE) K3805-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1001", RUN+="usb_modeswitch '/%k'" # Vodafone (ZTE) K3570-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1007", RUN+="usb_modeswitch '/%k'" # Vodafone (ZTE) K3571-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1009", RUN+="usb_modeswitch '/%k'" # Vodafone (ZTE) K3806-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1013", RUN+="usb_modeswitch '/%k'" # Vodafone K5006Z (MF821) ATTR{idVendor}=="19d2", ATTR{idProduct}=="1017", RUN+="usb_modeswitch '/%k'" # Vodafone / ZTE R203 Router ATTR{idVendor}=="19d2", ATTR{idProduct}=="1019", RUN+="usb_modeswitch '/%k'" # Vodafone / ZTE R203 Router ATTR{idVendor}=="19d2", ATTR{idProduct}=="1020", RUN+="usb_modeswitch '/%k'" # Vodafone / ZTE K4201-z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1022", RUN+="usb_modeswitch '/%k'" # Vodafone / ZTE R212 Router ATTR{idVendor}=="19d2", ATTR{idProduct}=="1026", RUN+="usb_modeswitch '/%k'" # Vodafone K5008-z (MF823) ATTR{idVendor}=="19d2", ATTR{idProduct}=="1030", RUN+="usb_modeswitch '/%k'" # Vodafone / ZTE R206-z Router ATTR{idVendor}=="19d2", ATTR{idProduct}=="1034", RUN+="usb_modeswitch '/%k'" # ZTE / Vodafone K4607-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1038", RUN+="usb_modeswitch '/%k'" # Vodafone / ZTE R209-z Router ATTR{idVendor}=="19d2", ATTR{idProduct}=="1042", RUN+="usb_modeswitch '/%k'" # ZTE MF730 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1046", RUN+="usb_modeswitch '/%k'" # Vodafone (ZTE) K4510-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1171", RUN+="usb_modeswitch '/%k'" # Vodafone / ZTE K3770-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1175", RUN+="usb_modeswitch '/%k'" # Vodafone (ZTE) K3772-Z ATTR{idVendor}=="19d2", ATTR{idProduct}=="1179", RUN+="usb_modeswitch '/%k'" # ZTE MF691 (T-Mobile Rocket 2.0) ATTR{idVendor}=="19d2", ATTR{idProduct}=="1201", RUN+="usb_modeswitch '/%k'" # ZTE MF192 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="1207", RUN+="usb_modeswitch '/%k'" # ZTE MF195 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1210", RUN+="usb_modeswitch '/%k'" # ZTE MF192 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="1216", RUN+="usb_modeswitch '/%k'" # ZTE MF192 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="1219", RUN+="usb_modeswitch '/%k'" # ZTE MF190 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1224", RUN+="usb_modeswitch '/%k'" # ZTE MF668 (Variant), MF70 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1225", RUN+="usb_modeswitch '/%k'" # ZTE MF680 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1227", RUN+="usb_modeswitch '/%k'" # ZTE MFxxx ATTR{idVendor}=="19d2", ATTR{idProduct}=="1232", RUN+="usb_modeswitch '/%k'" # ZTE MFxxx ATTR{idVendor}=="19d2", ATTR{idProduct}=="1233", RUN+="usb_modeswitch '/%k'" # ZTE / Vodafone K4201 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1237", RUN+="usb_modeswitch '/%k'" # ZTE MF825A ATTR{idVendor}=="19d2", ATTR{idProduct}=="1238", RUN+="usb_modeswitch '/%k'" # ZTE MF730 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1420", RUN+="usb_modeswitch '/%k'" # ZTE MF833V, Telewell TW-LTE v2 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1421", RUN+="usb_modeswitch '/%k'" # ZTE MFxxx ATTR{idVendor}=="19d2", ATTR{idProduct}=="1511", RUN+="usb_modeswitch '/%k'" # ZTE MF192 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="1514", RUN+="usb_modeswitch '/%k'" # ZTE MF192 (Variant) ATTR{idVendor}=="19d2", ATTR{idProduct}=="1517", RUN+="usb_modeswitch '/%k'" # ZTE MF652 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1520", RUN+="usb_modeswitch '/%k'" # ZTE MF591 TMobile ATTR{idVendor}=="19d2", ATTR{idProduct}=="1523", RUN+="usb_modeswitch '/%k'" # ZTE MF196 ATTR{idVendor}=="19d2", ATTR{idProduct}=="1528", RUN+="usb_modeswitch '/%k'" # ZTE MF190J ATTR{idVendor}=="19d2", ATTR{idProduct}=="1536", RUN+="usb_modeswitch '/%k'" # ZTE MF190J ATTR{idVendor}=="19d2", ATTR{idProduct}=="1542", RUN+="usb_modeswitch '/%k'" # ZTE MF195E ATTR{idVendor}=="19d2", ATTR{idProduct}=="1580", RUN+="usb_modeswitch '/%k'" # ZTE MF710M Variants ATTR{idVendor}=="19d2", ATTR{idProduct}=="1588", RUN+="usb_modeswitch '/%k'" # ZTE MF710 (Vietnam) a.o. ATTR{idVendor}=="19d2", ATTR{idProduct}=="1595", RUN+="usb_modeswitch '/%k'" # ZTE devices, some Onda devices ATTR{idVendor}=="19d2", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '/%k'" # ZTE MF60 ATTR{idVendor}=="19d2", ATTR{idProduct}=="2004", RUN+="usb_modeswitch '/%k'" # ZTE AX226 WiMax ATTR{idVendor}=="19d2", ATTR{idProduct}=="bccd", RUN+="usb_modeswitch '/%k'" # ZTE AC682 (a.k.a. SmartFren Connex) ATTR{idVendor}=="19d2", ATTR{idProduct}=="ffde", RUN+="usb_modeswitch '/%k'" # ZTE "ffe" devices 1 (e.g. Cricket A605) ATTR{idVendor}=="19d2", ATTR{idProduct}=="ffe6", RUN+="usb_modeswitch '/%k'" # ZTE "ff" devices 1 ATTR{idVendor}=="19d2", ATTR{idProduct}=="fff5", RUN+="usb_modeswitch '/%k'" # ZTE "fff" devices 2 ATTR{idVendor}=="19d2", ATTR{idProduct}=="fff6", RUN+="usb_modeswitch '/%k'" # BandRich BandLuxe C100, C120, C170, C270, C3xx, C508 ATTR{idVendor}=="1a8d", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # BandRich BandLuxe C339 ATTR{idVendor}=="1a8d", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '/%k'" # Hummer DTM5731, Aircard 901 ATTR{idVendor}=="1ab7", ATTR{idProduct}=="5700", RUN+="usb_modeswitch '/%k'" # EpiValley SEC-7089 (featured by Alegro and Starcomms / iZAP) ATTR{idVendor}=="1b7d", ATTR{idProduct}=="0700", RUN+="usb_modeswitch '/%k'" # ETCOM E300 ATTR{idVendor}=="1bbb", ATTR{idProduct}=="000f", RUN+="usb_modeswitch '/%k'" # Alcatel OT-X080C ATTR{idVendor}=="1bbb", ATTR{idProduct}=="00ca", RUN+="usb_modeswitch '/%k'" # Haier EVDO Rev. A ATTR{idVendor}=="1bbb", ATTR{idProduct}=="011f", RUN+="usb_modeswitch '/%k'" # Alcatel X602D ATTR{idVendor}=="1bbb", ATTR{idProduct}=="022c", RUN+="usb_modeswitch '/%k'" # Yota 4G LTE W8 ATTR{idVendor}=="1bbb", ATTR{idProduct}=="025e", RUN+="usb_modeswitch '/%k'" # Alcatel X200/X200L/X060S/L100V, Archos G9 3G Key ATTR{idVendor}=="1bbb", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Alcatel OT-X220D, L100V ATTR{idVendor}=="1bbb", ATTR{idProduct}=="f017", RUN+="usb_modeswitch '/%k'" # Alcatel OT X220L ATTR{idVendor}=="1bbb", ATTR{idProduct}=="f052", RUN+="usb_modeswitch '/%k'" # Alcatel One Touch X020 ATTR{idVendor}=="1c9e", ATTR{idProduct}=="1001", RUN+="usb_modeswitch '/%k'" # 4G System XS W21s ATTR{idVendor}=="1c9e", ATTR{idProduct}=="3003", RUN+="usb_modeswitch '/%k'" # TU930, IVIO IV-2010u ATTR{idVendor}=="1c9e", ATTR{idProduct}=="6000", RUN+="usb_modeswitch '/%k'" # Omega WL-72B ("Vibe 3G") ATTR{idVendor}=="1c9e", ATTR{idProduct}=="6061", RUN+="usb_modeswitch '/%k'" # Emobile D12LC ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9101", RUN+="usb_modeswitch '/%k'" # MyWave SW006 Sport Phone/Modem Combination ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9200", RUN+="usb_modeswitch '/%k'" # Emobile D21LC ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9401", RUN+="usb_modeswitch '/%k'" # Longcheer SU9800 ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9800", RUN+="usb_modeswitch '/%k'" # Telewell TW-3G HSPA+, FS01BU 3G, SmartBro WM66E ATTR{idVendor}=="1c9e", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '/%k'" # XS Stick W100 (Omega) ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9bfe", RUN+="usb_modeswitch '/%k'" # Prolink PCM100 ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9d00", RUN+="usb_modeswitch '/%k'" # BSNL Capitel ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9e00", RUN+="usb_modeswitch '/%k'" # Explay Slim ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9e08", RUN+="usb_modeswitch '/%k'" # Longcheer/Longsoon (aka Omega Technology) devices, MobiData MBD-200HU and others ATTR{idVendor}=="1c9e", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Micromax MMX400R / 4G Systems XSBOXGO ATTR{idVendor}=="1c9e", ATTR{idProduct}=="f010", RUN+="usb_modeswitch '/%k'" # JioFi JMR1040 ATTR{idVendor}=="1c9e", ATTR{idProduct}=="f030", RUN+="usb_modeswitch '/%k'" # TechFaith BSNL Capitel ATTR{idVendor}=="1d09", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # Aiko 81D ATTR{idVendor}=="1d09", ATTR{idProduct}=="1021", RUN+="usb_modeswitch '/%k'" # TechFaith FlyingLARK46 ATTR{idVendor}=="1d09", ATTR{idProduct}=="1025", RUN+="usb_modeswitch '/%k'" # Qisda H21 Flying Beetle ATTR{idVendor}=="1da5", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Wisue W340 ATTR{idVendor}=="1dbc", ATTR{idProduct}=="0669", RUN+="usb_modeswitch '/%k'" # Solomon S3Gm-660 ATTR{idVendor}=="1dd6", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # Philips PicoPix 1020 Projector ATTR{idVendor}=="1de1", ATTR{idProduct}=="1101", RUN+="usb_modeswitch '/%k'" # Option iCON 210, PROLiNK PHS100 + PH300, Hyundai MB-810, A-Link 3GU ATTR{idVendor}=="1e0e", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # 3GO 3GO11 HSUPA ATTR{idVendor}=="1e89", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # AirPlus MCD-800 ATTR{idVendor}=="1edf", ATTR{idProduct}=="6003", RUN+="usb_modeswitch '/%k'" # Onda MV815U ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" # Onda POM1051 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0007", RUN+="usb_modeswitch '/%k'" # Onda MW833UP ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0009", RUN+="usb_modeswitch '/%k'" # Onda MW833UP + MW835UP ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0013", RUN+="usb_modeswitch '/%k'" # Onda MO835UP ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0018", RUN+="usb_modeswitch '/%k'" # Onda MW836UP-K ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0040", RUN+="usb_modeswitch '/%k'" # Onda MDC655 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0045", RUN+="usb_modeswitch '/%k'" # Onda MT655 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0048", RUN+="usb_modeswitch '/%k'" # Onda MDC655 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="004a", RUN+="usb_modeswitch '/%k'" # Onda MDC655 Variant ATTR{idVendor}=="1ee8", ATTR{idProduct}=="004f", RUN+="usb_modeswitch '/%k'" # Onda MW875UP ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0054", RUN+="usb_modeswitch '/%k'" # Onda MSA 14.4 (TIM Brasil) ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0060", RUN+="usb_modeswitch '/%k'" # Onda TM201, CM201 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0063", RUN+="usb_modeswitch '/%k'" # Onda WM301 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0068", RUN+="usb_modeswitch '/%k'" # Cricket A600 ATTR{idVendor}=="1f28", ATTR{idProduct}=="0021", RUN+="usb_modeswitch '/%k'" # Franklin Wireless U210 (Variant) ATTR{idVendor}=="1fac", ATTR{idProduct}=="0032", RUN+="usb_modeswitch '/%k'" # Franklin Wireless U210 ATTR{idVendor}=="1fac", ATTR{idProduct}=="0130", RUN+="usb_modeswitch '/%k'" # Franklin Wireless U600 ATTR{idVendor}=="1fac", ATTR{idProduct}=="0150", RUN+="usb_modeswitch '/%k'" # Franklin Wireless U600 ATTR{idVendor}=="1fac", ATTR{idProduct}=="0151", RUN+="usb_modeswitch '/%k'" # D-Link DWM-157 B1 ATTR{idVendor}=="2001", ATTR{idProduct}=="00a6", RUN+="usb_modeswitch '/%k'" # D-Link DWM-157 C1 ATTR{idVendor}=="2001", ATTR{idProduct}=="00a7", RUN+="usb_modeswitch '/%k'" # D-Link DWP-157 C1 ATTR{idVendor}=="2001", ATTR{idProduct}=="7600", RUN+="usb_modeswitch '/%k'" # D-Link DWM-221 ATTR{idVendor}=="2001", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '/%k'" # D-Link DWM-221 B1 ATTR{idVendor}=="2001", ATTR{idProduct}=="a401", RUN+="usb_modeswitch '/%k'" # D-Link DWM-156 A8, DWP-157 B1 ATTR{idVendor}=="2001", ATTR{idProduct}=="a403", RUN+="usb_modeswitch '/%k'" # D-Link DWM-167 A1 ATTR{idVendor}=="2001", ATTR{idProduct}=="a405", RUN+="usb_modeswitch '/%k'" # D-Link DWM-221 ATTR{idVendor}=="2001", ATTR{idProduct}=="a406", RUN+="usb_modeswitch '/%k'" # D-Link DWM-157 C1 ATTR{idVendor}=="2001", ATTR{idProduct}=="a407", RUN+="usb_modeswitch '/%k'" # D-Link DWM-156 A8 (Myanmar) ATTR{idVendor}=="2001", ATTR{idProduct}=="a40a", RUN+="usb_modeswitch '/%k'" # D-Link DWR-910 ATTR{idVendor}=="2001", ATTR{idProduct}=="a40d", RUN+="usb_modeswitch '/%k'" # D-Link DWM-156 A7 ATTR{idVendor}=="2001", ATTR{idProduct}=="a706", RUN+="usb_modeswitch '/%k'" # D-Link DWM-157 B1 ATTR{idVendor}=="2001", ATTR{idProduct}=="a707", RUN+="usb_modeswitch '/%k'" # D-Link DWM-158 D1 ATTR{idVendor}=="2001", ATTR{idProduct}=="a708", RUN+="usb_modeswitch '/%k'" # D-Link DWR-510 ATTR{idVendor}=="2001", ATTR{idProduct}=="a805", RUN+="usb_modeswitch '/%k'" # D-Link DWM-157 A1 ATTR{idVendor}=="2001", ATTR{idProduct}=="a809", RUN+="usb_modeswitch '/%k'" # D-Link DWM-156 (Variant) ATTR{idVendor}=="2001", ATTR{idProduct}=="a80b", RUN+="usb_modeswitch '/%k'" # D-Link DWM-222 ATTR{idVendor}=="2001", ATTR{idProduct}=="ab00", RUN+="usb_modeswitch '/%k'" # D-Link DWM-222 A2 ATTR{idVendor}=="2001", ATTR{idProduct}=="ac01", RUN+="usb_modeswitch '/%k'" # Venus VT-18 ATTR{idVendor}=="2015", ATTR{idProduct}=="0001", RUN+="usb_modeswitch '/%k'" # Haier CE682 (EVDO) ATTR{idVendor}=="201e", ATTR{idProduct}=="1023", RUN+="usb_modeswitch '/%k'" # Haier CE 100 ATTR{idVendor}=="201e", ATTR{idProduct}=="2009", RUN+="usb_modeswitch '/%k'" # Mediatek MT6229, Micromax MMX 377G, Olicard 300 ATTR{idVendor}=="2020", ATTR{idProduct}=="0002", RUN+="usb_modeswitch '/%k'" # Telewell TW-LTE, Olicard 600, Digisol BG-BA4305 ATTR{idVendor}=="2020", ATTR{idProduct}=="2030", RUN+="usb_modeswitch '/%k'" # SpeedUp SU-8000 and others ATTR{idVendor}=="2020", ATTR{idProduct}=="f00e", RUN+="usb_modeswitch '/%k'" # SpeedUp SU-8000U ATTR{idVendor}=="2020", ATTR{idProduct}=="f00f", RUN+="usb_modeswitch '/%k'" # Changhong CH690, D-Link DWM-163 + DWM-168 ATTR{idVendor}=="2077", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # Telenet 3G dongle (T&W WU160), Netgear AC327U and others ATTR{idVendor}=="2077", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # BM WM78 ATTR{idVendor}=="20a6", ATTR{idProduct}=="f00a", RUN+="usb_modeswitch '/%k'" # Intex 3.5G ATTR{idVendor}=="20a6", ATTR{idProduct}=="f00e", RUN+="usb_modeswitch '/%k'" # Tlaytech TEU800 ATTR{idVendor}=="20b9", ATTR{idProduct}=="1682", RUN+="usb_modeswitch '/%k'" # StrongRising (China Telcom), Air FlexiNet ATTR{idVendor}=="21f5", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # StrongRising STD808 ATTR{idVendor}=="21f5", ATTR{idProduct}=="3010", RUN+="usb_modeswitch '/%k'" # Viettel VT100 ATTR{idVendor}=="2262", ATTR{idProduct}=="0001", RUN+="usb_modeswitch '/%k'" # WeTelecom WM-D200 ATTR{idVendor}=="22de", ATTR{idProduct}=="6801", RUN+="usb_modeswitch '/%k'" # WeTelecom WM-D200A ATTR{idVendor}=="22de", ATTR{idProduct}=="6802", RUN+="usb_modeswitch '/%k'" # WeTelecom WM-D300 ATTR{idVendor}=="22de", ATTR{idProduct}=="6803", RUN+="usb_modeswitch '/%k'" # Tata Photon+, Olive VME102 ATTR{idVendor}=="22f4", ATTR{idProduct}=="0021", RUN+="usb_modeswitch '/%k'" # Linktop LW272/LW273 (BSNL Teracom) ATTR{idVendor}=="230d", ATTR{idProduct}=="0001", RUN+="usb_modeswitch '/%k'" # Linktop LW272/LW273 (BSNL Teracom) ATTR{idVendor}=="230d", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" # Visiontek 82GH 3G ATTR{idVendor}=="230d", ATTR{idProduct}=="0007", RUN+="usb_modeswitch '/%k'" # Zoom 3G ATTR{idVendor}=="230d", ATTR{idProduct}=="000b", RUN+="usb_modeswitch '/%k'" # Zoom 3G ATTR{idVendor}=="230d", ATTR{idProduct}=="000c", RUN+="usb_modeswitch '/%k'" # Intex Speed 3G v7.2 ATTR{idVendor}=="230d", ATTR{idProduct}=="000d", RUN+="usb_modeswitch '/%k'" # Linktop LW272/LW273 ATTR{idVendor}=="230d", ATTR{idProduct}=="0101", RUN+="usb_modeswitch '/%k'" # Teracom LW272 ATTR{idVendor}=="230d", ATTR{idProduct}=="0103", RUN+="usb_modeswitch '/%k'" # TP-Link MA180 ATTR{idVendor}=="2357", ATTR{idProduct}=="0200", RUN+="usb_modeswitch '/%k'" # TP-Link UE300 ATTR{idVendor}=="2357", ATTR{idProduct}=="0600", RUN+="usb_modeswitch '/%k'" # TP-Link MA260 ATTR{idVendor}=="2357", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" # Titan 3.5G ATTR{idVendor}=="23a2", ATTR{idProduct}=="1010", RUN+="usb_modeswitch '/%k'" # Unknown devices ATTR{idVendor}=="257a", ATTR{idProduct}=="a000", RUN+="usb_modeswitch '/%k'" # Unknown devices ATTR{idVendor}=="257a", ATTR{idProduct}=="b000", RUN+="usb_modeswitch '/%k'" # Unknown devices ATTR{idVendor}=="257a", ATTR{idProduct}=="c000", RUN+="usb_modeswitch '/%k'" # Unknown devices ATTR{idVendor}=="257a", ATTR{idProduct}=="d000", RUN+="usb_modeswitch '/%k'" # 4G Systems W1208 ATTR{idVendor}=="2fd4", ATTR{idProduct}=="9aff", RUN+="usb_modeswitch '/%k'" # Dell DW5806 ATTR{idVendor}=="413c", ATTR{idProduct}=="81a2", RUN+="usb_modeswitch '/%k'" # Dell DW5570 ATTR{idVendor}=="413c", ATTR{idProduct}=="81a3", RUN+="usb_modeswitch '/%k'" # Dell DW5570e ATTR{idVendor}=="413c", ATTR{idProduct}=="81a4", RUN+="usb_modeswitch '/%k'" # Dell DW5808 ATTR{idVendor}=="413c", ATTR{idProduct}=="81a8", RUN+="usb_modeswitch '/%k'" # Dell DW5809e ATTR{idVendor}=="413c", ATTR{idProduct}=="81b1", RUN+="usb_modeswitch '/%k'" # Dell DW5809e ATTR{idVendor}=="413c", ATTR{idProduct}=="81b3", RUN+="usb_modeswitch '/%k'" # Dell DW5821e ATTR{idVendor}=="413c", ATTR{idProduct}=="81d7", RUN+="usb_modeswitch '/%k'" # Dell DW5821e-eSIM ATTR{idVendor}=="413c", ATTR{idProduct}=="81e0", RUN+="usb_modeswitch '/%k'" # BlueLink BL-EV08C ATTR{idVendor}=="6000", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" # Exiss Mobile E-190 series (made by C-motech) ATTR{idVendor}=="8888", ATTR{idProduct}=="6500", RUN+="usb_modeswitch '/%k'" # Aiko 81D, fw with wrong vendor ID ATTR{idVendor}=="ed09", ATTR{idProduct}=="1021", RUN+="usb_modeswitch '/%k'" LABEL="modeswitch_rules_end" rules.d/91-drm-modeset.rules 0000644 00000000070 15107240613 0011637 0 ustar 00 KERNEL=="controlD[0-9]*", SUBSYSTEM=="drm", MODE="0600" rules.d/60-tpm-udev.rules 0000644 00000000363 15107240613 0011161 0 ustar 00 # tpm devices can only be accessed by the tss user but the tss # group members can access tpmrm devices KERNEL=="tpm[0-9]*", TAG+="systemd", MODE="0660", OWNER="tss" KERNEL=="tpmrm[0-9]*", TAG+="systemd", MODE="0660", OWNER="tss", GROUP="tss" rules.d/60-input-id.rules 0000644 00000000432 15107240613 0011146 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="id_input_end" SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id" SUBSYSTEM=="input", IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=id-input:modalias:" LABEL="id_input_end" rules.d/60-persistent-alsa.rules 0000644 00000001150 15107240613 0012531 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="persistent_alsa_end" SUBSYSTEM!="sound", GOTO="persistent_alsa_end" KERNEL!="controlC[0-9]*", GOTO="persistent_alsa_end" SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{builtin}="usb_id" ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", SYMLINK+="snd/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}" ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", SYMLINK+="snd/by-id/$env{ID_BUS}-$env{ID_SERIAL}" IMPORT{builtin}="path_id" ENV{ID_PATH}=="?*", SYMLINK+="snd/by-path/$env{ID_PATH}" LABEL="persistent_alsa_end" rules.d/60-persistent-input.rules 0000644 00000005237 15107240613 0012762 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="persistent_input_end" SUBSYSTEM!="input", GOTO="persistent_input_end" SUBSYSTEMS=="bluetooth", ENV{ID_BUS}="bluetooth", GOTO="persistent_input_end" # Bluetooth devices don't always have the bluetooth subsystem ATTRS{id/bustype}=="0005", ENV{ID_BUS}="bluetooth", GOTO="persistent_input_end" SUBSYSTEMS=="rmi4", ENV{ID_BUS}="rmi" SUBSYSTEMS=="serio", ENV{ID_BUS}="i8042" SUBSYSTEMS=="usb", ENV{ID_BUS}=="", IMPORT{builtin}="usb_id" # determine class name for persistent symlinks ENV{ID_INPUT_KEYBOARD}=="?*", ENV{.INPUT_CLASS}="kbd" ENV{ID_INPUT_MOUSE}=="?*", ENV{.INPUT_CLASS}="mouse" ENV{ID_INPUT_TOUCHPAD}=="?*", ENV{.INPUT_CLASS}="mouse" ENV{ID_INPUT_TABLET}=="?*", ENV{.INPUT_CLASS}="mouse" ENV{ID_INPUT_JOYSTICK}=="?*", ENV{.INPUT_CLASS}="joystick" DRIVERS=="pcspkr", ENV{.INPUT_CLASS}="spkr" ATTRS{name}=="*dvb*|*DVB*|* IR *", ENV{.INPUT_CLASS}="ir" # fill empty serial number ENV{.INPUT_CLASS}=="?*", ENV{ID_SERIAL}=="", ENV{ID_SERIAL}="noserial" # by-id links KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="|00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{.INPUT_CLASS}" KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="?*", ATTRS{bInterfaceNumber}!="00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$attr{bInterfaceNumber}-$env{.INPUT_CLASS}" KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="|00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-$env{.INPUT_CLASS}" KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="?*", ATTRS{bInterfaceNumber}!="00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$attr{bInterfaceNumber}-event-$env{.INPUT_CLASS}" # allow empty class for USB devices, by appending the interface number SUBSYSTEMS=="usb", ENV{ID_BUS}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="", ATTRS{bInterfaceNumber}=="?*", \ SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-if$attr{bInterfaceNumber}" # by-path SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id" ENV{ID_PATH}=="?*", KERNEL=="mouse*|js*", ENV{.INPUT_CLASS}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-$env{.INPUT_CLASS}" ENV{ID_PATH}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-event-$env{.INPUT_CLASS}" # allow empty class for platform, usb and i2c devices; platform supports only a single interface that way SUBSYSTEMS=="usb|platform|i2c", ENV{ID_PATH}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="", \ SYMLINK+="input/by-path/$env{ID_PATH}-event" LABEL="persistent_input_end" rules.d/60-persistent-storage-tape.rules 0000644 00000004234 15107240613 0014212 0 ustar 00 # do not edit this file, it will be overwritten on update # persistent storage links: /dev/tape/{by-id,by-path} ACTION=="remove", GOTO="persistent_storage_tape_end" ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_tape_end" # type 8 devices are "Medium Changers" SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \ SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL} tape/by-id/scsi-$env{ID_SERIAL}-changer" # iSCSI devices from the same host have all the same ID_SERIAL, # but additionally a property named ID_SCSI_SERIAL. SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", ENV{ID_SCSI_SERIAL}=="?*", \ SYMLINK+="tape/by-id/scsi-$env{ID_SCSI_SERIAL}" SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{builtin}="path_id", \ SYMLINK+="tape/by-path/$env{ID_PATH}-changer" SUBSYSTEM!="scsi_tape", GOTO="persistent_storage_tape_end" KERNEL=="st*[0-9]|nst*[0-9]", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_BUS}="ieee1394" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{.BSG_DEV}="$root/bsg/$id" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --whitelisted --export --device=$env{.BSG_DEV}", ENV{ID_BUS}="scsi" KERNEL=="st*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}", OPTIONS+="link_priority=10" KERNEL=="st*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}" KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst" KERNEL=="nst*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}-nst" # by-path (parent device path) KERNEL=="st*[0-9]|nst*[0-9]", IMPORT{builtin}="path_id" KERNEL=="st*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}" KERNEL=="nst*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}-nst" LABEL="persistent_storage_tape_end" rules.d/60-persistent-storage.rules 0000644 00000025225 15107240613 0013266 0 ustar 00 # do not edit this file, it will be overwritten on update # persistent storage links: /dev/disk/{by-id,by-uuid,by-label,by-path} # scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de> ACTION=="remove", GOTO="persistent_storage_end" ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_end" SUBSYSTEM!="block|ubi", GOTO="persistent_storage_end" KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|xvd*|bcache*|cciss*|dasd*|ubd*|ubi*|scm*|pmem*|nbd*|zd*", GOTO="persistent_storage_end" # ignore partitions that span the entire disk TEST=="whole_disk", GOTO="persistent_storage_end" # For partitions import parent disk ID_* information, except ID_FS_*. # # This is particularly important on media where a filesystem superblock and # partition table are found on the same level, e.g. common Linux distro ISO # installation media. # # In the case where a partition device points to the same filesystem that # was detected on the parent disk, the ID_FS_* information is already # present on the partition devices as well as the parent, so no need to # propagate it. In the case where the partition device points to a different # filesystem, merging the parent ID_FS_ properties would lead to # inconsistencies, so we avoid doing so. ENV{DEVTYPE}=="partition", \ IMPORT{parent}="ID_[!F]*", IMPORT{parent}="ID_", \ IMPORT{parent}="ID_F[!S]*", IMPORT{parent}="ID_F", \ IMPORT{parent}="ID_FS[!_]*", IMPORT{parent}="ID_FS" # NVMe KERNEL=="nvme*[0-9]n*[0-9]", ATTR{wwid}=="?*", SYMLINK+="disk/by-id/nvme-$attr{wwid}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{wwid}=="?*", SYMLINK+="disk/by-id/nvme-$attr{wwid}-part%n" KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{serial}=="?*", ENV{ID_SERIAL_SHORT}="$attr{serial}" KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{wwid}=="?*", ENV{ID_WWN}="$attr{wwid}" KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{model}=="?*", ENV{ID_MODEL}="$attr{model}" KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{firmware_rev}=="?*", ENV{ID_REVISION}="$attr{firmware_rev}" KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{nsid}=="?*", ENV{ID_NSID}="$attr{nsid}" # obsolete symlink with non-escaped characters, kept for backward compatiblity KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \ ENV{ID_MODEL}!="*/*", ENV{ID_SERIAL_SHORT}!="*/*", \ ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}" # obsolete symlink that might get overridden on adding a new nvme controller, kept for backward compatibility KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \ OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}" KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_NSID}=="?*", \ OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}_$env{ID_NSID}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{serial}=="?*", ENV{ID_SERIAL_SHORT}="$attr{serial}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{model}=="?*", ENV{ID_MODEL}="$attr{model}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{firmware_rev}=="?*", ENV{ID_REVISION}="$attr{firmware_rev}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{nsid}=="?*", ENV{ID_NSID}="$attr{nsid}" # obsolete symlink with non-escaped characters, kept for backward compatiblity KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \ ENV{ID_MODEL}!="*/*", ENV{ID_SERIAL_SHORT}!="*/*", \ ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}-part%n" # obsolete symlink that might get overridden on adding a new nvme controller, kept for backward compatibility KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \ OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}-part%n" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_NSID}=="?*", \ OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}_$env{ID_NSID}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}-part%n" # virtio-blk KERNEL=="vd*[!0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/virtio-$env{ID_SERIAL}" KERNEL=="vd*[0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/virtio-$env{ID_SERIAL}-part%n" # ATA KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", ATTRS{vendor}=="ATA", IMPORT{program}="ata_id --export $devnode" # ATAPI devices (SPC-3 or later) KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", ATTRS{type}=="5", ATTRS{scsi_level}=="[6-9]*", IMPORT{program}="ata_id --export $devnode" # Run ata_id on non-removable USB Mass Storage (SATA/PATA disks in enclosures) KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", ATTR{removable}=="0", SUBSYSTEMS=="usb", IMPORT{program}="ata_id --export $devnode" # Also import properties from usb_id for USB devices KERNEL=="sd*[!0-9]|sr*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" # SCSI devices KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="scsi" KERNEL=="cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="cciss" KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}" KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n" # Previously, ata_id in the above might not be able to retrieve attributes correctly, # and properties from usb_id were used as a fallback. See issue #24921 and PR #24923. # To keep backward compatibility, still we need to create symlinks based on USB serial. # See issue #25179. KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_USB_SERIAL}=="?*", SYMLINK+="disk/by-id/usb-$env{ID_USB_SERIAL}" KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_USB_SERIAL}=="?*", SYMLINK+="disk/by-id/usb-$env{ID_USB_SERIAL}-part%n" # PMEM devices KERNEL=="pmem*", ENV{DEVTYPE}=="disk", ATTRS{uuid}=="?*", SYMLINK+="disk/by-id/pmem-$attr{uuid}" # FireWire KERNEL=="sd*[!0-9]|sr*", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}" KERNEL=="sd*[0-9]", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}-part%n" # MMC KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}" KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ENV{ID_NAME}="$attr{name}" KERNEL=="mmcblk[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}" KERNEL=="mmcblk[0-9]p[0-9]*", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n" # Memstick KERNEL=="msblk[0-9]|mspblk[0-9]", SUBSYSTEMS=="memstick", ATTRS{name}=="?*", ATTRS{serial}=="?*", \ ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/memstick-$env{ID_NAME}_$env{ID_SERIAL}" KERNEL=="msblk[0-9]p[0-9]|mspblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/memstick-$env{ID_NAME}_$env{ID_SERIAL}-part%n" # by-path ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id" ENV{DEVTYPE}=="disk", SUBSYSTEMS=="nvme-subsystem", IMPORT{builtin}="path_id" KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-boot%n" KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}" ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n" # compatible links for ATA devices KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}" ENV{DEVTYPE}=="partition", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}-part%n" # legacy virtio-pci by-path links (deprecated) KERNEL=="vd*[!0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}" KERNEL=="vd*[0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}-part%n" # allow admin to disable probing the filesystem for slow devices like floppy disk drives ENV{UDEV_DISABLE_PERSISTENT_STORAGE_BLKID_FLAG}=="1", GOTO="persistent_storage_blkid_probe_end" # probe filesystem metadata of optical drives which have a media inserted KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \ IMPORT{builtin}="blkid --hint=session_offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}" # single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \ IMPORT{builtin}="blkid --noraid" # probe filesystem metadata of disks KERNEL!="sr*|mmcblk[0-9]boot[0-9]", IMPORT{builtin}="blkid" LABEL="persistent_storage_blkid_probe_end" # by-label/by-uuid links (filesystem metadata) ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" # by-id (World Wide Name) ENV{DEVTYPE}=="disk", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION}" ENV{DEVTYPE}=="partition", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION}-part%n" # by-partlabel/by-partuuid links (partition metadata) ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}" ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}" # by-diskseq link (if an app is told to open a path like this, they may parse # the diskseq number from the path, then issue BLKGETDISKSEQ to verify they really got # the right device, to access specific disks in a race-free fashion) ENV{DISKSEQ}=="?*", ENV{DEVTYPE}!="partition", ENV{DISKSEQ}=="?*", ENV{ID_IGNORE_DISKSEQ}!="1", SYMLINK+="disk/by-diskseq/$env{DISKSEQ}" LABEL="persistent_storage_end" rules.d/60-persistent-v4l.rules 0000644 00000001401 15107240613 0012315 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="persistent_v4l_end" SUBSYSTEM!="video4linux", GOTO="persistent_v4l_end" ENV{MAJOR}=="", GOTO="persistent_v4l_end" IMPORT{program}="v4l_id $devnode" SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" KERNEL=="video*", ENV{ID_SERIAL}=="?*", SYMLINK+="v4l/by-id/$env{ID_BUS}-$env{ID_SERIAL}-video-index$attr{index}" # check for valid "index" number TEST!="index", GOTO="persistent_v4l_end" ATTR{index}!="?*", GOTO="persistent_v4l_end" IMPORT{builtin}="path_id" ENV{ID_PATH}=="?*", KERNEL=="video*|vbi*", SYMLINK+="v4l/by-path/$env{ID_PATH}-video-index$attr{index}" ENV{ID_PATH}=="?*", KERNEL=="audio*", SYMLINK+="v4l/by-path/$env{ID_PATH}-audio-index$attr{index}" LABEL="persistent_v4l_end" rules.d/60-sensor.rules 0000644 00000003122 15107240613 0010725 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="sensor_end" # device matching the sensor's label, name and the machine's DMI data for IIO devices SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c|platform", ATTR{label}!="", \ IMPORT{builtin}="hwdb 'sensor:$attr{label}:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \ GOTO="sensor_end" # Before Linux v6.0, cros-ec-accel used a non-standard 'location' sysfs file SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="platform", \ ATTR{name}=="cros-ec-accel|cros-ec-accel-legacy", ATTR{location}=="base", \ IMPORT{builtin}="hwdb 'sensor:accel-base:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \ GOTO="sensor_end" SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="platform", \ ATTR{name}=="cros-ec-accel|cros-ec-accel-legacy", ATTR{location}=="lid", \ IMPORT{builtin}="hwdb 'sensor:accel-display:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \ GOTO="sensor_end" # device matching the sensor's name and the machine's DMI data for IIO devices SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c|platform", \ IMPORT{builtin}="hwdb 'sensor:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \ GOTO="sensor_end" SUBSYSTEM=="input", ENV{ID_INPUT_ACCELEROMETER}=="1", SUBSYSTEMS=="acpi", \ IMPORT{builtin}="hwdb 'sensor:modalias:acpi:$attr{hid}:$attr{[dmi/id]modalias}'", \ GOTO="sensor_end" SUBSYSTEM=="input", ENV{ID_INPUT_ACCELEROMETER}=="1", SUBSYSTEMS=="platform", \ IMPORT{builtin}="hwdb 'sensor:modalias:platform:$id:$attr{[dmi/id]modalias}'", \ GOTO="sensor_end" LABEL="sensor_end" rules.d/60-serial.rules 0000644 00000002160 15107240613 0010674 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="serial_end" SUBSYSTEM!="tty", GOTO="serial_end" SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb" SUBSYSTEMS=="pci", ENV{ID_BUS}=="", ENV{ID_BUS}="pci", \ ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}", \ IMPORT{builtin}="hwdb --subsystem=pci" # /dev/serial/by-path/, /dev/serial/by-id/ for USB devices KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="serial_end" SUBSYSTEMS=="usb-serial", ENV{.ID_PORT}="$attr{port_number}" IMPORT{builtin}="path_id" ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="", SYMLINK+="serial/by-path/$env{ID_PATH}" ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-path/$env{ID_PATH}-port$env{.ID_PORT}" ENV{ID_BUS}=="", GOTO="serial_end" ENV{ID_SERIAL}=="", GOTO="serial_end" ENV{ID_USB_INTERFACE_NUM}=="", GOTO="serial_end" ENV{.ID_PORT}=="", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}" ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}-port$env{.ID_PORT}" LABEL="serial_end" rules.d/64-btrfs.rules 0000644 00000001150 15107240613 0010537 0 ustar 00 # do not edit this file, it will be overwritten on update SUBSYSTEM!="block", GOTO="btrfs_end" ACTION=="remove", GOTO="btrfs_end" ENV{ID_FS_TYPE}!="btrfs", GOTO="btrfs_end" ENV{SYSTEMD_READY}=="0", GOTO="btrfs_end" # let the kernel know about this btrfs filesystem, and check if it is complete IMPORT{builtin}="btrfs ready $devnode" # mark the device as not ready to be used by the system ENV{ID_BTRFS_READY}=="0", ENV{SYSTEMD_READY}="0" # reconsider pending devices in case when multidevice volume awaits ENV{ID_BTRFS_READY}=="1", RUN+="/usr/bin/udevadm trigger -s block -p ID_BTRFS_READY=0" LABEL="btrfs_end" rules.d/70-camera.rules 0000644 00000000431 15107240613 0010645 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="camera_end" SUBSYSTEM=="video4linux", ENV{ID_BUS}="usb" , \ IMPORT{builtin}="hwdb 'camera:usb:v$env{ID_VENDOR_ID}p$env{ID_MODEL_ID}:name:$attr{name}:'", \ GOTO="camera_end" LABEL="camera_end" rules.d/70-joystick.rules 0000644 00000000660 15107240613 0011260 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="joystick_end" ENV{ID_INPUT_JOYSTICK}=="", GOTO="joystick_end" KERNEL!="event*", GOTO="joystick_end" # joystick:<bustype>:v<vid>p<pid>:name:<name>:* KERNELS=="input*", ENV{ID_BUS}!="", \ IMPORT{builtin}="hwdb 'joystick:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \ GOTO="joystick_end" LABEL="joystick_end" rules.d/70-memory.rules 0000644 00000000270 15107240613 0010726 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="memory_end" SUBSYSTEM!="dmi", GOTO="memory_end" IMPORT{program}="dmi_memory_id" LABEL="memory_end" rules.d/70-mouse.rules 0000644 00000001336 15107240613 0010552 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="mouse_end" KERNEL!="event*", GOTO="mouse_end" ENV{ID_INPUT_MOUSE}=="", GOTO="mouse_end" # mouse:<subsystem>:v<vid>p<pid>:name:<name>:* KERNELS=="input*", ENV{ID_BUS}=="usb", \ IMPORT{builtin}="hwdb 'mouse:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \ GOTO="mouse_end" KERNELS=="input*", ENV{ID_BUS}=="bluetooth", \ IMPORT{builtin}="hwdb 'mouse:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \ GOTO="mouse_end" DRIVERS=="psmouse", SUBSYSTEMS=="serio", \ IMPORT{builtin}="hwdb 'mouse:ps2::name:$attr{device/name}:'", \ GOTO="mouse_end" LABEL="mouse_end" rules.d/70-power-switch.rules 0000644 00000001100 15107240613 0012042 0 ustar 00 # SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. ACTION=="remove", GOTO="power_switch_end" SUBSYSTEM=="input", KERNEL=="event*", ENV{ID_INPUT_SWITCH}=="1", TAG+="power-switch" SUBSYSTEM=="input", KERNEL=="event*", ENV{ID_INPUT_KEY}=="1", TAG+="power-switch" LABEL="power_switch_end" rules.d/70-touchpad.rules 0000644 00000000731 15107240613 0011227 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="touchpad_end" ENV{ID_INPUT}=="", GOTO="touchpad_end" ENV{ID_INPUT_TOUCHPAD}=="", GOTO="touchpad_end" KERNEL!="event*", GOTO="touchpad_end" # touchpad:<subsystem>:v<vid>p<pid>:name:<name>:* KERNELS=="input*", ENV{ID_BUS}!="", \ IMPORT{builtin}="hwdb 'touchpad:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \ GOTO="touchpad_end" LABEL="touchpad_end" rules.d/70-uaccess.rules 0000644 00000007250 15107240613 0011051 0 ustar 00 # SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. ACTION=="remove", GOTO="uaccess_end" ENV{MAJOR}=="", GOTO="uaccess_end" # PTP/MTP protocol devices, cameras, portable media players SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:060101:*", TAG+="uaccess" # Digicams with proprietary protocol ENV{ID_GPHOTO2}=="?*", TAG+="uaccess" # SCSI and USB scanners ENV{libsane_matched}=="yes", TAG+="uaccess" # HPLIP devices (necessary for ink level check and HP tool maintenance) ENV{ID_HPLIP}=="1", TAG+="uaccess" # optical drives SUBSYSTEM=="block", ENV{ID_CDROM}=="1", TAG+="uaccess" SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", TAG+="uaccess" # Sound devices SUBSYSTEM=="sound", TAG+="uaccess", \ OPTIONS+="static_node=snd/timer", OPTIONS+="static_node=snd/seq" # Webcams, frame grabber, TV cards SUBSYSTEM=="video4linux", TAG+="uaccess" SUBSYSTEM=="dvb", TAG+="uaccess" SUBSYSTEM=="media", TAG+="uaccess" # industrial cameras, some webcams, camcorders, set-top boxes, TV sets, audio devices, and more SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_MIDI}=="1", TAG+="uaccess" SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_AUDIO}=="1", TAG+="uaccess" SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_VIDEO}=="1", TAG+="uaccess" # DRI video devices SUBSYSTEM=="drm", KERNEL=="card*", TAG+="uaccess" # smart-card readers ENV{ID_SMARTCARD_READER}=="?*", TAG+="uaccess" # (USB) authentication devices ENV{ID_SECURITY_TOKEN}=="?*", TAG+="uaccess" # PDA devices ENV{ID_PDA}=="?*", TAG+="uaccess" # Programmable remote control ENV{ID_REMOTE_CONTROL}=="1", TAG+="uaccess" # joysticks SUBSYSTEM=="input", ENV{ID_INPUT_JOYSTICK}=="?*", TAG+="uaccess" # color measurement devices ENV{COLOR_MEASUREMENT_DEVICE}=="?*", TAG+="uaccess" # DDC/CI device, usually high-end monitors such as the DreamColor ENV{DDC_DEVICE}=="?*", TAG+="uaccess" # media player raw devices (for user-mode drivers, Android SDK, etc.) SUBSYSTEM=="usb", ENV{ID_MEDIA_PLAYER}=="?*", TAG+="uaccess" # software-defined radio communication devices ENV{ID_SOFTWARE_RADIO}=="?*", TAG+="uaccess" # 3D printers, CNC machines, laser cutters, 3D scanners, etc. ENV{ID_MAKER_TOOL}=="?*", TAG+="uaccess" # Protocol analyzers ENV{ID_SIGNAL_ANALYZER}=="?*", ENV{DEVTYPE}=="usb_device", TAG+="uaccess" ENV{ID_SIGNAL_ANALYZER}=="?*", KERNEL=="ttyACM[0-9]*", TAG+="uaccess" # rfkill / radio killswitches KERNEL=="rfkill", SUBSYSTEM=="misc", TAG+="uaccess" # AV production controllers # Most of these devices use HID for the knobs, faders, buttons, encoders, and jog wheels. SUBSYSTEM=="hidraw", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess" # Some devices use vendor defined protocols on USB Bulk endpoints for controllers. # Other devices transfer graphics to screens on the device through USB Bulk endpoints. # This also allows accessing HID devices with the libusb backend of hidapi. SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess" # USB and Bluetooth controllable lights SUBSYSTEM=="hidraw", ENV{ID_AV_LIGHTS}=="1", TAG+="uaccess" SUBSYSTEM=="usb", ENV{ID_AV_LIGHTS}=="1", TAG+="uaccess" # Hardware wallets SUBSYSTEM=="usb", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess" SUBSYSTEM=="hidraw", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess" # 3D mice # As defined in https://en.wikipedia.org/wiki/3Dconnexion SUBSYSTEM=="hidraw", ENV{ID_INPUT_3D_MOUSE}=="1", TAG+="uaccess" LABEL="uaccess_end" rules.d/71-seat.rules 0000644 00000007352 15107240613 0010363 0 ustar 00 # SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. ACTION=="remove", GOTO="seat_end" TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat" SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat" SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat" SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat" # Assign keyboard and LCD backlights to the seat SUBSYSTEM=="leds", TAG+="seat" SUBSYSTEM=="backlight", TAG+="seat" # Allow efifb / uvesafb to be a master if KMS is disabled SUBSYSTEM=="graphics", KERNEL=="fb[0-9]", IMPORT{cmdline}="nomodeset", TAG+="master-of-seat" # Allow any PCI graphics device to be a master and synthesize a seat if KMS # is disabled and the kernel doesn't have a driver that would work with this device. SUBSYSTEM=="pci", ENV{ID_PCI_CLASS_FROM_DATABASE}=="Display controller", \ ENV{DRIVER}=="", IMPORT{cmdline}="nomodeset", TAG+="seat", TAG+="master-of-seat" # Synthesize a seat for graphic devices without DRM and that fall back to fb # device instead. Such HWs are listed in hwdb. SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", ATTRS{modalias}=="?*", IMPORT{builtin}="hwdb fb:$attr{modalias}" ENV{ID_TAG_MASTER_OF_SEAT}=="1", TAG+="master-of-seat" SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat" # Allow individual USB ports to be assigned to a seat SUBSYSTEM=="usb", ATTR{bDeviceClass}=="00", TAG+="seat" # Allow USB hubs (and all downstream ports) to be assigned to a seat SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat" # 'Plugable' USB hub, sound, network, graphics adapter SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="000[13]", ENV{ID_AUTOSEAT}="1" # qemu (version 2.4+) has a PCI-PCI bridge (-device pci-bridge-seat) to group # devices belonging to one seat. See: # http://git.qemu.org/?p=qemu.git;a=blob;f=docs/multiseat.txt SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", TAG+="seat", ENV{ID_AUTOSEAT}="1" # Mimo 720, with integrated USB hub, displaylink graphics, and e2i # touchscreen. This device carries no proper VID/PID in the USB hub, # but it does carry good ID data in the graphics component, hence we # check it from the parent. There's a bit of a race here however, # given that the child devices might not exist yet at the time this # rule is executed. To work around this we'll trigger the parent from # the child if we notice that the parent wasn't recognized yet. # Match parent SUBSYSTEM=="usb", ATTR{idVendor}=="058f", ATTR{idProduct}=="6254", \ ATTR{%k.2/idVendor}=="17e9", ATTR{%k.2/idProduct}=="401a", ATTR{%k.2/product}=="mimo inc", \ ENV{ID_AUTOSEAT}="1", ENV{ID_AVOID_LOOP}="1" # Match child, look for parent's ID_AVOID_LOOP SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \ ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \ IMPORT{parent}="ID_AVOID_LOOP" # Match child, retrigger parent SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \ ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \ ENV{ID_AVOID_LOOP}=="", \ RUN+="/usr/bin/udevadm trigger --parent-match=%p/.." TAG=="seat", ENV{ID_PATH}=="", IMPORT{builtin}="path_id" TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH_TAG}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH_TAG}" SUBSYSTEM=="input", ATTR{name}=="Wiebetech LLC Wiebetech", RUN+="/usr/bin/loginctl lock-sessions" LABEL="seat_end" rules.d/73-seat-late.rules 0000644 00000001203 15107240613 0011275 0 ustar 00 # SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. ACTION=="remove", GOTO="seat_late_end" ENV{ID_SEAT}=="", ENV{ID_AUTOSEAT}=="1", ENV{ID_FOR_SEAT}!="", ENV{ID_SEAT}="seat-$env{ID_FOR_SEAT}" ENV{ID_SEAT}=="", IMPORT{parent}="ID_SEAT" ENV{ID_SEAT}!="", TAG+="$env{ID_SEAT}" TAG=="uaccess", ENV{MAJOR}!="", RUN{builtin}+="uaccess" LABEL="seat_late_end" rules.d/75-net-description.rules 0000644 00000001000 15107240613 0012522 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="net_end" SUBSYSTEM!="net", GOTO="net_end" IMPORT{builtin}="hwdb 'net:naming:dr$env{ID_NET_DRIVER}:'" IMPORT{builtin}="net_id" SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb" SUBSYSTEMS=="usb", GOTO="net_end" SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" SUBSYSTEMS=="pci", IMPORT{builtin}="hwdb --subsystem=pci" LABEL="net_end" rules.d/75-probe_mtd.rules 0000644 00000000256 15107240613 0011402 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION!="add", GOTO="mtd_probe_end" KERNEL=="mtd*ro", IMPORT{program}="mtd_probe $devnode" LABEL="mtd_probe_end" rules.d/78-sound-card.rules 0000644 00000011320 15107240613 0011463 0 ustar 00 # do not edit this file, it will be overwritten on update SUBSYSTEM!="sound", GOTO="sound_end" ACTION=="add|change", KERNEL=="controlC*", ATTR{../uevent}="change" ACTION!="change", GOTO="sound_end" # Ok, we probably need a little explanation here for what the two lines above # are good for. # # The story goes like this: when ALSA registers a new sound card it emits a # series of 'add' events to userspace, for the main card device and for all the # child device nodes that belong to it. udev relays those to applications, # however only maintains the order between father and child, but not between # the siblings. The control device node creation can be used as synchronization # point. All other devices that belong to a card are created in the kernel # before it. However unfortunately due to the fact that siblings are forwarded # out of order by udev this fact is lost to applications. # # OTOH before an application can open a device it needs to make sure that all # its device nodes are completely created and set up. # # As a workaround for this issue we have added the udev rule above which will # generate a 'change' event on the main card device from the 'add' event of the # card's control device. Due to the ordering semantics of udev this event will # only be relayed after all child devices have finished processing properly. # When an application needs to listen for appearing devices it can hence look # for 'change' events only, and ignore the actual 'add' events. # # When the application is initialized at the same time as a device is plugged # in it may need to figure out if the 'change' event has already been triggered # or not for a card. To find that out we store the flag environment variable # SOUND_INITIALIZED on the device which simply tells us if the card 'change' # event has already been processed. KERNEL!="card*", GOTO="sound_end" ENV{SOUND_INITIALIZED}="1" IMPORT{builtin}="hwdb" SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" SUBSYSTEMS=="usb", GOTO="skip_pci" SUBSYSTEMS=="firewire", ATTRS{guid}=="?*", \ ENV{ID_BUS}="firewire", ENV{ID_SERIAL}="$attr{guid}", ENV{ID_SERIAL_SHORT}="$attr{guid}", \ ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{model}", \ ENV{ID_VENDOR}="$attr{vendor_name}", ENV{ID_MODEL}="$attr{model_name}" SUBSYSTEMS=="firewire", GOTO="skip_pci" SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" SUBSYSTEMS=="pci", GOTO="skip_pci" # If we reach here, the device nor any of its parents are USB/PCI/firewire bus devices. # If we now find a parent that is a platform device, assume that we're working with # an internal sound card. SUBSYSTEMS=="platform", ENV{SOUND_FORM_FACTOR}="internal", GOTO="sound_end" LABEL="skip_pci" # Define ID_ID if ID_BUS and ID_SERIAL are set. This will work for both # USB and firewire. ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}" ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}" IMPORT{builtin}="path_id" # The values used here for $SOUND_FORM_FACTOR and $SOUND_CLASS should be kept # in sync with those defined for PulseAudio's src/pulse/proplist.h # PA_PROP_DEVICE_FORM_FACTOR, PA_PROP_DEVICE_CLASS properties. # If the first PCM device of this card has the pcm class 'modem', then the card is a modem ATTR{pcmC%nD0p/pcm_class}=="modem", ENV{SOUND_CLASS}="modem", GOTO="sound_end" # Identify cards on the internal PCI bus as internal SUBSYSTEMS=="pci", DEVPATH=="*/0000:00:??.?/sound/*", ENV{SOUND_FORM_FACTOR}="internal", GOTO="sound_end" # Devices that also support Image/Video interfaces are most likely webcams SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACES}=="*:0e????:*", ENV{SOUND_FORM_FACTOR}="webcam", GOTO="sound_end" # Matching on the model strings is a bit ugly, I admit ENV{ID_MODEL}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end" ENV{ID_MODEL}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end" ENV{ID_MODEL}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end" ENV{ID_MODEL}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end" ENV{ID_MODEL}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end" ENV{ID_MODEL_FROM_DATABASE}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end" LABEL="sound_end" rules.d/80-drivers.rules 0000644 00000001130 15107240613 0011071 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION!="add", GOTO="drivers_end" ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load" SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}+="kmod load tifm_sd" SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}+="kmod load tifm_ms" SUBSYSTEM=="memstick", RUN{builtin}+="kmod load ms_block mspro_block" SUBSYSTEM=="i2o", RUN{builtin}+="kmod load i2o_block" SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}+="kmod load ppdev" KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}+="kmod load sm_ftl" LABEL="drivers_end" rules.d/80-net-setup-link.rules 0000644 00000000447 15107240613 0012304 0 ustar 00 # do not edit this file, it will be overwritten on update SUBSYSTEM!="net", GOTO="net_setup_link_end" IMPORT{builtin}="path_id" ACTION=="remove", GOTO="net_setup_link_end" IMPORT{builtin}="net_setup_link" NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}" LABEL="net_setup_link_end" rules.d/81-net-dhcp.rules 0000644 00000001020 15107240613 0011114 0 ustar 00 # do not edit this file, it will be overwritten on update ACTION=="remove", GOTO="net_dhcp_end" SUBSYSTEM!="net", GOTO="net_dhcp_end" # Network interfaces requiring DHCPOFFER messages to be broadcast # must set ID_NET_DHCP_BROADCAST to "1". This property will be # checked by the networkd DHCP4 client to set the DHCP option # s390 ccwgroup interfaces in layer3 mode need broadcast DHCPOFFER # using the link driver to detect this condition ENV{ID_NET_DRIVER}=="qeth_l3", ENV{ID_NET_DHCP_BROADCAST}="1" LABEL="net_dhcp_end" rules.d/90-vconsole.rules 0000644 00000000751 15107240613 0011254 0 ustar 00 # SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # Each vtcon keeps its own state of fonts. # ACTION=="add", SUBSYSTEM=="vtconsole", KERNEL=="vtcon*", RUN+="/usr/lib/systemd/systemd-vconsole-setup" rules.d/99-systemd.rules 0000644 00000011657 15107240613 0011134 0 ustar 00 # SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. ACTION=="remove", GOTO="systemd_end" SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty[0-9]*", TAG+="systemd" KERNEL=="vport*", TAG+="systemd" SUBSYSTEM=="ubi", TAG+="systemd" SUBSYSTEM=="block", TAG+="systemd" # We can't make any conclusions about suspended DM devices so let's just import previous SYSTEMD_READY state and skip other rules SUBSYSTEM=="block", ENV{DM_SUSPENDED}=="1", IMPORT{db}="SYSTEMD_READY", GOTO="systemd_end" SUBSYSTEM=="block", ACTION=="add", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0" # Ignore encrypted devices with no identified superblock on it, since # we are probably still calling mke2fs or mkswap on it. SUBSYSTEM=="block", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0" # Explicitly set SYSTEMD_READY=1 for DM devices that don't have it set yet, so that we always have something to import above SUBSYSTEM=="block", ENV{DM_UUID}=="?*", ENV{SYSTEMD_READY}=="", ENV{SYSTEMD_READY}="1" # add symlink to GPT root disk SUBSYSTEM=="block", ENV{ID_PART_GPT_AUTO_ROOT}=="1", ENV{ID_FS_TYPE}!="crypto_LUKS", SYMLINK+="gpt-auto-root" SUBSYSTEM=="block", ENV{ID_PART_GPT_AUTO_ROOT}=="1", ENV{ID_FS_TYPE}=="crypto_LUKS", SYMLINK+="gpt-auto-root-luks" SUBSYSTEM=="block", ENV{DM_UUID}=="CRYPT-*", ENV{DM_NAME}=="root", SYMLINK+="gpt-auto-root" # Ignore raid devices that are not yet assembled and started SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", TEST!="md/array_state", ENV{SYSTEMD_READY}="0" SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0" # Ignore loop devices that don't have any file attached SUBSYSTEM=="block", KERNEL=="loop[0-9]*", ENV{DEVTYPE}=="disk", TEST!="loop/backing_file", ENV{SYSTEMD_READY}="0" # Ignore nbd devices until the PID file exists (which signals a connected device) SUBSYSTEM=="block", KERNEL=="nbd*", ENV{DEVTYPE}=="disk", TEST!="pid", ENV{SYSTEMD_READY}="0" # We need a hardware independent way to identify network devices. We # use the /sys/subsystem/ path for this. Kernel "bus" and "class" names # should be treated as one namespace, like udev handles it. This is mostly # just an identification string for systemd, so whether the path actually is # accessible or not does not matter as long as it is unique and in the # filesystem namespace. SUBSYSTEM=="net", KERNEL!="lo", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/net/devices/$name" SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/bluetooth/devices/%k", \ ENV{SYSTEMD_WANTS}+="bluetooth.target", ENV{SYSTEMD_USER_WANTS}+="bluetooth.target" ENV{ID_SMARTCARD_READER}=="?*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="smartcard.target", ENV{SYSTEMD_USER_WANTS}+="smartcard.target" SUBSYSTEM=="sound", KERNEL=="controlC*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sound.target", ENV{SYSTEMD_USER_WANTS}+="sound.target" SUBSYSTEM=="printer", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target", ENV{SYSTEMD_USER_WANTS}+="printer.target" SUBSYSTEM=="usb", KERNEL=="lp*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target", ENV{SYSTEMD_USER_WANTS}+="printer.target" SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target", ENV{SYSTEMD_USER_WANTS}+="printer.target" SUBSYSTEM=="udc", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="usb-gadget.target" # Apply sysctl variables to network devices (and only to those) as they appear. ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/$name --prefix=/net/ipv4/neigh/$name --prefix=/net/ipv6/conf/$name --prefix=/net/ipv6/neigh/$name" # Pull in backlight save/restore for all backlight devices and # keyboard backlights SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service" SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service" # Pull in rfkill save/restore for all rfkill devices SUBSYSTEM=="rfkill", ENV{SYSTEMD_RFKILL}="1" SUBSYSTEM=="rfkill", IMPORT{builtin}="path_id" SUBSYSTEM=="misc", KERNEL=="rfkill", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-rfkill.socket" # Asynchronously mount file systems implemented by these modules as soon as they are loaded. SUBSYSTEM=="module", KERNEL=="fuse", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" SUBSYSTEM=="module", KERNEL=="configfs", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" LABEL="systemd_end" rules.d/README 0000644 00000000663 15107240613 0007004 0 ustar 00 Files in this directory contain configuration for systemd-udevd.service, a daemon that manages symlinks to device nodes, permissions of devices nodes, emits device events for userspace, and renames network interfaces. See man:udev(7) for an overview of the configuration file format, and man:systemd-udevd.service(8) for a description of service itself. Use 'systemd-analyze cat-config udev/rules.d' to display the effective config. rules.d/40-usb-blacklist.rules 0000644 00000000712 15107240613 0012153 0 ustar 00 # # Blacklist specific USB devices # # don't inquire sn and di on broken devices (https://bugzilla.suse.com/show_bug.cgi?id=840054) ACTION!="add|change", GOTO="usb_blacklist_end" KERNEL!="sd*[!0-9]|sr*", GOTO="usb_blacklist_end" # unknown device ATTRS{idVendor}=="0aec", ATTRS{idProduct}=="3260", ENV{ID_SCSI_INQUIRY}="1" # Sony/JMicron port replicator ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06a0", ENV{ID_SCSI_INQUIRY}="1" LABEL="usb_blacklist_end" rules.d/84-nm-drivers.rules 0000644 00000001025 15107240613 0011510 0 ustar 00 # Do not modify this file, it will get overwritten on updates. # To override or extend the rules place a file in /etc/udev/rules.d SUBSYSTEM!="net", GOTO="nm_drivers_end" ACTION!="add|change|move", GOTO="nm_drivers_end" # Determine ID_NET_DRIVER if there's no ID_NET_DRIVER or DRIVERS (old udev?) ENV{ID_NET_DRIVER}=="?*", GOTO="nm_drivers_end" DRIVERS=="?*", GOTO="nm_drivers_end" PROGRAM="/bin/sh -c '/usr/sbin/ethtool -i $$1 |/usr/bin/sed -n s/^driver:\ //p' -- $env{INTERFACE}", ENV{ID_NET_DRIVER}="%c" LABEL="nm_drivers_end" rules.d/85-nm-unmanaged.rules 0000644 00000003735 15107240613 0012004 0 ustar 00 # Do not modify this file, it will get overwritten on updates. # To override or extend the rules place a file in /etc/udev/rules.d SUBSYSTEM!="net", GOTO="nm_unmanaged_end" ACTION!="add|change|move", GOTO="nm_unmanaged_end" # VirtualBox host networking. Out-of-tree driver that looks like an ordinary # Ethernet. No parent device (lives in /virtual/), no support for ethtool # to identify the driver, MAC address defaults to 08:00:27:, but can be # changed. Interface name will have to do, it's always vboxnet*. ENV{INTERFACE}=="vboxnet[0-9]*", ENV{NM_UNMANAGED}="1" # VMWare host networking. Out-of-tree driver that looks like an ordinary # Ethernet. No parent device (lives in /virtual/), no support for # ethtool to identify the driver. They have their own MAC prefix that # can not be changed. ATTR{address}=="00:50:56:*", ENV{INTERFACE}=="vmnet[0-9]*", ENV{NM_UNMANAGED}="1" # Parallels Workstation host networking. Out-of-tree driver that looks like # an ordinary Ethernet. No parent device (lives in /virtual/), no support for # ethtool to identify the driver and the interface name is too generic. # However, they have their own MAC prefix that can not be changed. ATTR{address}=="00:1c:42:*", ENV{INTERFACE}=="vnic[0-9]*", ENV{NM_UNMANAGED}="1" # Virtual Ethernet device pair. Often used to communicate with a peer interface # in another net namespace and managed by libvirt, Docker or the like. # Generally we don't want to mess with those. One exception would be the # full system containers, like LXC or LXD. LXC containers run via libvirt # don't use udev, so this doesn't apply. LXD does, though. To deal with the # LXD situation, let's treat the devices called eth* as regular ethernet. ENV{ID_NET_DRIVER}=="veth", ENV{INTERFACE}!="eth[0-9]*", ENV{NM_UNMANAGED}="1" # USB gadget device. Unmanage by default, since whatever created it # might want to set it up itself (e.g. activate an ipv4.method=shared # connection). ENV{DEVTYPE}=="gadget", ENV{NM_UNMANAGED}="1" LABEL="nm_unmanaged_end" rules.d/90-nm-thunderbolt.rules 0000644 00000001114 15107240613 0012360 0 ustar 00 # Do not modify this file, it will get overwritten on updates. # To override or extend the rules place a file in /etc/udev/rules.d ACTION!="add|change|move", GOTO="nm_thunderbolt_end" # Load he thunderbolt-net driver if we a device of type thunderbolt_xdomain # is added. SUBSYSTEM=="thunderbolt", ENV{DEVTYPE}=="thunderbolt_xdomain", RUN{builtin}+="kmod load thunderbolt-net" # For all thunderbolt network devices, we want to enable link-local configuration SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="thunderbolt-net", ENV{NM_AUTO_DEFAULT_LINK_LOCAL_ONLY}="1" LABEL="nm_thunderbolt_end" rules.d/70-libfprint-2.rules 0000644 00000001171 15107240613 0011547 0 ustar 00 # This file is part of libfprint # Do not modify this file, it will get overwritten on updates. # To override or extend the rules place a file in /etc/udev/rules.d # ElanTech Embedded Fingerprint Sensor ACTION=="add|change", SUBSYSTEM=="spi", ENV{MODALIAS}=="acpi:ELAN7001:", RUN{builtin}+="kmod load spi:spidev", RUN+="/bin/sh -c 'echo spidev > %S%p/driver_override && echo %k > %S%p/subsystem/drivers/spidev/bind'" ACTION=="add|change", SUBSYSTEM=="spi", ENV{MODALIAS}=="acpi:ELAN70A1:", RUN{builtin}+="kmod load spi:spidev", RUN+="/bin/sh -c 'echo spidev > %S%p/driver_override && echo %k > %S%p/subsystem/drivers/spidev/bind'" rules.d/60_flashrom.rules 0000644 00000006471 15107240613 0011323 0 ustar 00 ## ## This file is part of the flashrom project. ## ## Copyright (C) 2010 Uwe Hermann <uwe@hermann-uwe.de> ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## ## Please keep this list sorted alphabetically by vendor/device name. ## ## ## This is tested on udev version 154, other versions may need small fixes. ## ## Note that you might want to change the "plugdev" group to whatever is ## suitable for your respective distribution. ## ACTION!="add|change", GOTO="flashrom_rules_end" SUBSYSTEM!="usb|usb_device", GOTO="flashrom_rules_end" # Amontec JTAGkey(2) # http://www.amontec.com/jtagkey.shtml ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", TAG+="uaccess" # Buspirate # http://dangerousprototypes.com/2009/10/08/bus-pirate-raw-spi-mode/ ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", TAG+="uaccess" # Dediprog SF100 # http://www.dediprog.com/SPI-flash-in-circuit-programming/SF100 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="dada", TAG+="uaccess" # DLP Design DLP-USB1232H # http://www.dlpdesign.com/usb/usb1232h.shtml ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", TAG+="uaccess" # FIC OpenMoko Neo1973 Debug board (V2+) # http://wiki.openmoko.org/wiki/Neo1973_Debug_Board_v2 ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", TAG+="uaccess" # FTDI FT4232H Mini-Module # http://www.ftdichip.com/Products/EvaluationKits/FT4232H_MiniModule.htm ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", TAG+="uaccess" # GOEPEL PicoTAP # http://www.goepel.com/jtagboundary-scan/hardware/picotap.html ATTRS{idVendor}=="096c", ATTRS{idProduct}=="1449", TAG+="uaccess" # Google servo debug board # https://www.chromium.org/chromium-os/servo ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5001", TAG+="uaccess" ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5002", TAG+="uaccess" ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5003", TAG+="uaccess" # Olimex ARM-USB-OCD # http://olimex.com/dev/arm-usb-ocd.html ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0003", TAG+="uaccess" # Olimex ARM-USB-OCD-H # http://olimex.com/dev/arm-usb-ocd-h.html ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002b", TAG+="uaccess" # Olimex ARM-USB-TINY # http://olimex.com/dev/arm-usb-tiny.html ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0004", TAG+="uaccess" # Olimex ARM-USB-TINY-H # http://olimex.com/dev/arm-usb-tiny-h.html ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", TAG+="uaccess" # TIAO/DIYGADGET USB Multi-Protocol Adapter (TUMPA) # http://www.diygadget.com/tiao-usb-multi-protocol-adapter-jtag-spi-i2c-serial.html ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a98", TAG+="uaccess" # TIAO/DIYGADGET USB Multi-Protocol Adapter (TUMPA) Lite # http://www.tiaowiki.com/w/TIAO_USB_Multi_Protocol_Adapter_Lite_User's_Manual ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a99", TAG+="uaccess" # Winchiphead (WCH) CH341a based programmer ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="5512", TAG+="uaccess" LABEL="flashrom_rules_end" rules.d/95-upower-hid.rules 0000644 00000017655 15107240613 0011527 0 ustar 00 ############################################################################################################## # Uninterruptible Power Supplies with USB HID interfaces # # This file was automatically generated by NUT: # https://github.com/networkupstools/nut/ # # To keep up to date, monitor upstream NUT # https://github.com/networkupstools/nut/commits/master/scripts/upower/95-upower-hid.rules # or checkout the NUT repository and call 'tools/nut-usbinfo.pl' # newer hiddev are part of the usbmisc class SUBSYSTEM=="usbmisc", GOTO="up_hid_chkdev" # only support USB, else ignore SUBSYSTEM!="usb", GOTO="up_hid_end" # if usbraw device, ignore LABEL="up_hid_chkdev" KERNEL!="hiddev*", GOTO="up_hid_end" # if an interface, ignore ENV{DEVTYPE}=="usb_interface", GOTO="up_hid_end" ATTRS{idVendor}=="03f0", ENV{UPOWER_VENDOR}="Hewlett Packard" ATTRS{idVendor}=="0463", ENV{UPOWER_VENDOR}="Eaton" ATTRS{idVendor}=="047c", ENV{UPOWER_VENDOR}="Dell" ATTRS{idVendor}=="04d8", ENV{UPOWER_VENDOR}="Minibox" ATTRS{idVendor}=="050d", ENV{UPOWER_VENDOR}="Belkin" ATTRS{idVendor}=="051d", ENV{UPOWER_VENDOR}="APC" ATTRS{idVendor}=="0592", ENV{UPOWER_VENDOR}="Powerware" ATTRS{idVendor}=="06da", ENV{UPOWER_VENDOR}="Phoenixtec Power Co., Ltd" ATTRS{idVendor}=="075d", ENV{UPOWER_VENDOR}="iDowell" ATTRS{idVendor}=="0764", ENV{UPOWER_VENDOR}="Cyber Power Systems" ATTRS{idVendor}=="09ae", ENV{UPOWER_VENDOR}="TrippLite" ATTRS{idVendor}=="0d9f", ENV{UPOWER_VENDOR}="PowerCOM" ATTRS{idVendor}=="10af", ENV{UPOWER_VENDOR}="Liebert" # Hewlett Packard ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f06", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f08", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f09", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f0a", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe0", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe1", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe2", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe3", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe5", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe6", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe7", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe8", ENV{UPOWER_BATTERY_TYPE}="ups" # Eaton ATTRS{idVendor}=="0463", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0463", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups" # Dell ATTRS{idVendor}=="047c", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups" # Minibox ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="d004", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="d005", ENV{UPOWER_BATTERY_TYPE}="ups" # Belkin ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0375", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0551", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0750", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0751", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0900", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0910", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0912", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0980", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0f51", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="050d", ATTRS{idProduct}=="1100", ENV{UPOWER_BATTERY_TYPE}="ups" # APC ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0000", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0002", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0003", ENV{UPOWER_BATTERY_TYPE}="ups" # Powerware ATTRS{idVendor}=="0592", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups" # Phoenixtec Power Co., Ltd ATTRS{idVendor}=="06da", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups" # iDowell ATTRS{idVendor}=="075d", ATTRS{idProduct}=="0300", ENV{UPOWER_BATTERY_TYPE}="ups" # Cyber Power Systems ATTRS{idVendor}=="0764", ATTRS{idProduct}=="0005", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0764", ATTRS{idProduct}=="0501", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0764", ATTRS{idProduct}=="0601", ENV{UPOWER_BATTERY_TYPE}="ups" # TrippLite ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1003", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1007", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1008", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1009", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1010", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2005", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2007", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2008", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2009", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2010", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2011", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2012", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2013", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2014", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3008", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3009", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3010", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3011", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3012", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3013", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3014", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3015", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3016", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4001", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4002", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4003", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4004", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4005", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4006", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4007", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4008", ENV{UPOWER_BATTERY_TYPE}="ups" # PowerCOM ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a2", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a3", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a4", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a5", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a6", ENV{UPOWER_BATTERY_TYPE}="ups" # Liebert ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups" ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0008", ENV{UPOWER_BATTERY_TYPE}="ups" LABEL="up_hid_end" rules.d/90-bolt.rules 0000644 00000000547 15107240613 0010367 0 ustar 00 # bolt udev rules # # SPDX-License-Identifier: GPL-2.0-or-later # # Copyright © 2017 Red Hat, Inc # # Authors: # Christian J. Kellner <ckellner@redhat.com> # ACTION=="remove", GOTO="bolt_end" # start bolt service if we have a thunderbolt device connected SUBSYSTEM=="thunderbolt", TAG+="systemd", ENV{SYSTEMD_WANTS}+="bolt.service" LABEL="bolt_end" rules.d/63-fc-wwpn-id.rules 0000644 00000001160 15107240613 0011372 0 ustar 00 # # FC WWPN-based by-path links # ACTION!="add|change", GOTO="fc_wwpn_end" KERNEL!="sd*", GOTO="fc_wwpn_end" ENV{DEVTYPE}=="disk", IMPORT{program}="fc_wwpn_id %p" ENV{DEVTYPE}=="partition", IMPORT{parent}="FC_*" ENV{FC_TARGET_WWPN}!="?*", GOTO="fc_wwpn_end" ENV{FC_INITIATOR_WWPN}!="?*", GOTO="fc_wwpn_end" ENV{FC_TARGET_LUN}!="?*", GOTO="fc_wwpn_end" ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-path/fc-$env{FC_INITIATOR_WWPN}-$env{FC_TARGET_WWPN}-lun-$env{FC_TARGET_LUN}" ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-path/fc-$env{FC_INITIATOR_WWPN}-$env{FC_TARGET_WWPN}-lun-$env{FC_TARGET_LUN}-part%n" LABEL="fc_wwpn_end" rules.d/40-elevator.rules 0000644 00000001330 15107240613 0011232 0 ustar 00 # We aren't adding devices skip the elevator check ACTION!="add", GOTO="sched_out" SUBSYSTEM!="block", GOTO="sched_out" ENV{DEVTYPE}!="disk", GOTO="sched_out" # Technically, dm-multipath can be configured to use an I/O scheduler. # However, there are races between the 'add' uevent and the linking in # of the queue/scheduler sysfs file. For now, just skip dm- devices. KERNEL=="dm-*|md*", GOTO="sched_out" # Skip bio-based devices, which don't support an I/O scheduler. ATTR{queue/scheduler}=="none", GOTO="sched_out" # If elevator= is specified on the kernel command line, change the # scheduler to the one specified. IMPORT{cmdline}="elevator" ENV{elevator}!="", ATTR{queue/scheduler}="$env{elevator}" LABEL="sched_out"