diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2012-04-03 21:08:04 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2012-04-03 21:08:04 +0200 |
commit | 19c5f19d69bb5f520fa7213239490c55de06d99d (patch) | |
tree | 0066ff6b95da3b86812f72f771fd09bab25d4e7a | |
parent | 3eff4208ffecedd778fec260f0d4b18e94dab443 (diff) | |
parent | 4db539b27021dcaa716828cbb689f591adb5af23 (diff) |
import udev repository
210 files changed, 43585 insertions, 0 deletions
diff --git a/src/udev/.gitignore b/src/udev/.gitignore new file mode 100644 index 000000000..fa3500ba9 --- /dev/null +++ b/src/udev/.gitignore @@ -0,0 +1,40 @@ +*~ +*.o +*.a +*.lo +*.la +.libs +.deps +.dirstamp +Makefile +Makefile.in +/aclocal.m4 +/autom4te.cache +/config.h +/config.h.in +/config.log +/config.status +/config.guess +/config.sub +/libtool +/ltmain.sh +/install-sh +/missing +/configure +/stamp-h1 +/depcomp +/gtk-doc.make +/build-aux +/udev-test-install +/udevd +/udevadm +/test-udev +/test-libudev +/accelerometer +/ata_id +/cdrom_id +/collect +/mtd_probe +/v4l_id +/keymap +/scsi_id diff --git a/src/udev/.vimrc b/src/udev/.vimrc new file mode 100644 index 000000000..366fbdca4 --- /dev/null +++ b/src/udev/.vimrc @@ -0,0 +1,4 @@ +" 'set exrc' in ~/.vimrc will read .vimrc from the current directory +set tabstop=8 +set shiftwidth=8 +set expandtab diff --git a/src/udev/COPYING b/src/udev/COPYING new file mode 100644 index 000000000..d159169d1 --- /dev/null +++ b/src/udev/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/src/udev/ChangeLog b/src/udev/ChangeLog new file mode 100644 index 000000000..dd5813826 --- /dev/null +++ b/src/udev/ChangeLog @@ -0,0 +1,6387 @@ +Summary of changes from v181 to v182 +============================================ + +Kay Sievers (22): + build-sys: unpack test sysfs only for 'make check' + build-sys: add --disable-manpages + update sd-daemon files + test: remove outdated key attributes + update TOO + builtin: path_id - remove dead cciss code + rules: do not create by-id/scsi-* links for ATA devices + remove udev-acl + udev.conf - do not set any value by default + move src/extras subdirectories to src/ + rules: delete outdated 30-kernel-compat.rules + rules: move 42-qemu-usb.rules to rules/ dir + remove edd_id extra + build-sys: remove empty directory + rules: delete s390 rules, they will move to s390utils + update TODO + rules: move all rules to top level rules/ dir + extras: path_id - skip ATA transport class devices + extras: path_id - add comment about readdir() rebase logic + extras: ata_id - do not log error if HDIO_GET_IDENTITY fails + rules sort order: /lib, /run, /etc + build-sys: place build binaries in the root + +Matthew Garrett (1): + rules: Enable USB autosuspend on more USB HID devices + + +Summary of changes from v180 to v181 +============================================ + +Andreas Schwab (1): + ata_id: fix identify string fixup + +Bruno Redondi (1): + keymap: Add Fujitsu Siemens Amilo Li 2732 + +James M. Leddy (1): + keymap: Fix touchpad toggle button on Lenovo Ideapad + +Kay Sievers (4): + configure: show ROOTPREFIX in firmware path option help text + extras: cdrom_id - create /dev/cdrom and conditionally /dev/dvd for sr0 + extras: cdrom_id - create only /dev/cdrom + ata_id: whitespace fixes + +Lucas De Marchi (1): + builtin: kmod - depend on libkmod >= 5 + + +Summary of changes from v179 to v180 +============================================ + +Kay Sievers (4): + Makefile: update kernel.org hooks + build-sys: we need to install shipped man pages without xsltproc installed + builtin: blkid - add missing ID_ prefix for PART_ENTRY_* keys + do not stop rule processing when device node is no longer around + + +Summary of changes from v178 to v179 +============================================ + +Kay Sievers (8): + fix some fallout from tab removal + use devnode() for $name not sysname(), device nodes might be in a subdirectory + print warning when rules try to rename kernel device nodes + move variable inside condition + update TODO + build-sys: enable everything for 'make distcheck' + use sysname() for devices without a device node + fix path to extras + + +Summary of changes from v177 to v178 +============================================ + +Evan Nemerson (1): + gudev: several minor introspection fixes + +Kay Sievers (7): + Makefile: update kernel.org doc hooks for kup + builtin: blkid - add missing ID_ prefix + udevd: kill hanging event processes after 30 seconds + Makefile: switch from .asc to .sign + rules: rtc - point /dev/rtc symlink to 'hctosys' device + warn about deprecated RUN+="socket:" use + libudev: do not set DEVNAME= twice + +Martin Pitt (4): + keymap: Fix rfkill button on Hewlett-Packard HP ProBook + keymap: Fix eject button on Samsung 700Z series + keymap: Fix keyboard brightness keys on Samsung 700Z series + keymap: Add Alienware M14xR1 + + +Summary of changes from v176 to v177 +============================================ + +Kay Sievers (3): + Makefile: update kernel.org sign and upload hook + rule_generator: fix to install rules in rules.d/ + rule_generator: use += for dist_udevhome_DATA + + +Summary of changes from v175 to v176 +============================================ + +Alan Stern (1): + [PATCH[ udev: ata_id: Fix length of INQUIRY command + +Kay Sievers (61): + libudev: print log_fn address instead of ctx when setting logging function + do not ship autogen.sh in the tarball + man: clarify 'config file stack' + rename 'init' directory to 'systemd' + systemd: use PassCred=yes + use libexecdir, bindir, sbindir, switch to /usr/lib/udev in documentation + configure: fix typo + make: do not (mis-)use the config file generator, create .xz tarball + prepare builtins for blkid and kmod + add builtin load/unload initializers + build argv[] for builtin commands + update blkid builtin + rules: switch to built-in blkid + rules: do not preprocess 60-persistent-storage.rules + buildsys: disable tar.gz + builtin: blkid - add missing newline + builtin: blkid - add missing ID_FS_USAGE + builtin: kmod - switch modprobe to builtin + rules: do not preprocess 80-drivers.rules + 75-probe_mtd.rules + builtin: apply format string + remove last sbindir use + update NEWS + autogen.sh: moce CFLAGS from to configure.ac; print common ./configure options + builtin: kmod - link against libkmod + add copyright + builtin: kmod - reload index when rules are reloaded + builtin: rename load()/unload() to init()/exit() + invalidate rules and kmod index with 'udevadm control --reload' + update NEWS + builtin: firmware - move 'firmware' tool to builtins + builtin: firmware - add missing file + builtin: kmod - hook up udev main logging to libkmod + make: introduce --with-rootprefix= + update NEWS + move rules dirs to udev context; replace inotify with time-controlled stat() + udevd: always create runtime dir + builtin: move usb-db, pci-db to builtins + builtin: kmod - switch to kmod_module_probe_insert_module() + udevd: remove TIMEOUT= handling + update README + systemd: rename PassCred= to PsssCredentials= + remove mknod() logic and rely on 'devtmpfs' + builtin: kmod - hook up kmod_validate_resources() + build-sys: use use ${ac_default_prefix} + require kmod >= 3 + build-sys: use --libexecdir=/usr/lib instead of /usr/lib/udev + autogen.sh: enable git pre-commit + merge udev/, libudev/, systemd/ files in src/; move extras/ to src/ + replace unpacked sysfs test tree 'test/sys/' with packed tarball + rules: delete arch specific rules + doc: fix out of tree build (copy from libkmod) + autogen.sh: add CFLAGS and print entire line, so that mouse copy/paste works + build-sys: try to build without installed xsltproc + add test/src to .gitignore + tabs are as useful as a hole in the head + autogen.sh: makedev() misteriously breaks with -O0 here, use -O1 for now + fix debug message + add .vimrc + cdrom_id: int -> bool + fix compiler warning + man: mention that no daemons should be started by udev + +Lucas De Marchi (1): + builtin: kmod - log if modules are blacklisted + +Luis Felipe Strano Moraes (1): + Switch spawn_read to void and remove useless stores there. + +Martin Pitt (1): + 75-persistent-net-generator.rules: Add Xen + +Mike Frysinger (1): + hwdb: drop useless line freeing + +Sjoerd Simons (1): + keymap: Add Lenovo Thinkpad X220 Tablet + +Ville Skyttä (1): + man: spelling fix + + +Summary of changes from v174 to v175 +============================================ + +David Zeuthen (2): + gudev: Use strtoul to parse unsigned 64-bit integers + gudev: Use g_ascii_strtoull() instead of strtoul() + +Harald Hoyer (1): + extras/keymap/findkeyboards: beautify shell code and get rid of grep + +Jerone Young (1): + keymap: Fix micmute remap for Lenovo Thinkpads + +Kay Sievers (7): + make: add gpg signing bits + ignore entire rules line if unknown keys are used + do not skip /dev/{disk,char}/M:m removal when the device node is already gone + replace AC_DISABLE_STATIC with LT_INIT([disable-static]) + make: tweak some autofoo according to Flameeyes' recommendations for libabc + rules: restore rule to set cdrom group for optical drives + rules: fix typo + +Martin Pitt (8): + check-keymaps.sh: Allow running separately + extras/keymap/findkeyboards: Filter out non-event devices + findkeyboards: Consistently use spaces instead of tabs + keymap: Fix stuck keys on GIGABYTE i1520M + keymap: More Asus module variants + keymap: Fix "internet" key on HP G62 + keymap: Fix bluetooth key on Acer TravelMate 7720 + keymap: Fix stuck keys on BenQ nScreen + + +Summary of changes from v173 to v174 +============================================ + +David Zeuthen (1): + ata_id: Check for Compact Flash card + +Jerone Young (1): + Add mic mute keycode support for Lenovo Thinkpad USB keyboard + +Kay Sievers (34): + gtk-doc: delete empty files + libudev: list - use binary search for list lookup + rules: move input_id to default rules + implement path_id, usb_id, input_id as built-in command + do not remove static nodes on module unload + rules: remove legacy rules for cdrom and usb printer + update TODO + preserve 'sticky bit' on 'add/change' events + libudev: util_get_sys_(subsystem,driver}() -> util_get_sys_core_link_value() + export USEC_INITIALIZED= and take timestamp on message receive time + libudev: udev_device_get_sysattr_value() return syspath of custom links + libudev: list - properly sort linked list not only the index + mknod: do not complain about existing node + update README + libudev: fix typo in documentation + rules: fuse: do not mount fusectl from udev rules + keymap: add genius keymap to Makefile + update NEWS + usb_id: can't use global variables when used as built-in + remove 'udevadm trigger --type=failed' and SYSFS, ID, BUS keys + libudev: export udev_util_encode_string() + update TODO + systemd: no not start udev in a container + systemd: no not start udev in a container + delete left-over files in extras/ + systemd: update drop-in sd-daemon files + udevadm: control - use /run/udev/control socket instead of abstract namespace one + udevd: control - no not delete socket file when --daemon is used + udev_ctrl_cleanup()- accept NULL as argument + update NEWS + udevd: install into /lib/udev instead of /sbin + udevd: add missing braces + systemd: use ConditionCapability=CAP_MKNOD instead of ConditionVirtualization=!container + rules: do not load sg module + +Kir Kolyshkin (1): + keymap: add Genius SlimStar 320 + +Martin Pitt (1): + keymap: Update Acer Aspire 5920g + +Matthias Clasen (1): + make: allow to pass ${ACLOCAL_FLAGS} + +Paul Fox (1): + keymap: update the OLPC keymap for correct function key behavior + +Petr Uzel (1): + udevadm: settle - return failure if unknown option is given + +Steve Langasek (1): + udevd: exit - process events before signals in worker + +Thomas Hood (2): + keymap: Support keymap overrides in /etc/udev/keymaps + keymap: Support for microphone mute button on ThinkPad X220 et al + + +Summary of changes from v172 to v173 +============================================ + +Allin Cottrell (1): + configure: allow to disable mtd_probe + +Kay Sievers (15): + make: fix 'make tar-sync' + udevd: use 'uptime' in debug timestamp + udevd: fix (recently) broken static node permission setting + rules: mount fuse filesystem only 'add' + udevadm: move udevadm command descriptions into their files + udev-acl: skip ACLs when systemd is running, disable by default + do not delete database when renaming netif, the db name does not change anymore + do not allow kernel properties to be set by udev rules + configure: reorder options + rules: input - do not create (broken) links for bluetooth devices + rules: serial - do not export ID_PORT, use ID_USB_INTERFACE_NUM + rules: sound - instead of ID_IFACE use standard ID_USB_INTERFACE_NUM + keymap: do not run usb_id for bluetooth devices + udevadm: trigger --type=failed - log deprecation warning + udevd: debug - put timestamp in [] + +Martin Pitt (4): + gudev: Ship JavaScript examples + scsi_id: Ship README + Remove obsolete extras/scsi_id/scsi_id.config + keymap: Only run on key devices + + +Summary of changes from v171 to v172 +============================================ + +Bastien Nocera (3): + accelerometer: add orientation property + udev-acl: fix memleak + accelerometer: add documentation + +Harald Hoyer (2): + udevadm-*.c: return != 0, if unknown option given + udev/udevadm-monitor.c: fixed misplaced brace + +Kay Sievers (33): + rules: apply 'audio' group of the static snd/{seq,timer} nodes + Makefile: add tar-sync + rules: static_node - use 0660 if group is given to get the cigar + rule-syntax-check.py: use print() + make: use 'git tag' + rules: run input_id for main input devices too + update TODO + configure: add AC_CONFIG_AUX_DIR, AC_CONFIG_SRCDIR + cdrom_id: add tray lock and eject handling + rules: enable in-kernel media-presence polling + update TODO + delete mobile-action-modeswitch which has moved to usb_modeswitch + libudev: enumerate - scan /sys/module + rules: move polling rule above 'block' match + libudev: monitor - update doc + rules: set polling value only if it is disabled + libudev: device - fix udev_device_get_tags_list_entry() to always load database + rules: remove redundant MODE="0664" from lp rules + rules: fix wrong wildcard match, we always need a ':*' at the end + libudev: device - export udev_device_has_tag() + path_id: add missing '-' to tape suffix + path_id: add ID_PATH_TAG= to be used in udev tags + enforce valid TAG+= names + update TODO + libudev: device - add udev_device_has_tag() to libudev.h and gtk-doc + libudev: enumerate - add udev_enumerate_add_match_parent() + libudev: enumerate - include parent device itself with match_parent() + libudev: enumerate - clarify documentation + path_id: recognize ACPI parent devices + rules: input - call path_id for ACPI devices + udevadm: monitor - use uptime to match the kernel's timestamp + libudev: ctrl - move code to udev directory + update sd-daemon.[ch] + +Keshav P.R (1): + rules: support for gpt partition uuid/label + +Lee, Chun-Yi (1): + Support more MSI notebook by using asterisk on dmi vendor name + +Marco d'Itri (1): + Add missing commas to 95-keymap.rules + +Martin Pitt (3): + keymap: Add Microsoft Natural Keyboard + keymap: Add force-release quirk for Hannspree SN10. + keymap: Add slight name variations of Toshiba Satellites + +Peter Jones (1): + ata_id: show the error message when HDIO_GET_IDENTITY fails + + +Summary of changes from v170 to v171 +============================================ + +Kay Sievers (17): + libudev: export symbols explicitely and individually from C code not from separate file or prefix match + libudev: device - make a bunch of symbols static + systemd: Replace Requires= with Wants=, run trigger in parallel + systemd: sort trigger after socket + systemd: trigger - run after udev.service (for now) + systemd: set socket buffer size to 128 MB like udev has + update TODO + update TODO + libudev: monitor - use SOCK_NONBLOCK + systemd: split socket file + systemd: add missing socket files + rules: fix whitespace + rules: implement TAGS== match + libudev: enumerate - do not ignore other matches when add_match_tag() is used + rules: support substitutions in TAG= + path_id: allow to be asked about usb_devices not only usb_interfaces + systemd: run udev.service and udev-trigger.service in parallel + +Scott James Remnant (1): + configure: allow usb.ids location to be specified + + +Summary of changes from v169 to v170 +============================================ + +Kay Sievers (1): + libudev: ctrl - properly wait for incoming message after connect + +Michal Soltys (1): + configure.ac: fixes for rule_generator and modeswitch + + +Summary of changes from v168 to v169 +============================================ + +Kay Sievers (26): + simplify rules file overwrite logic + libudev: list - use bit flags for 'sort' and 'unique' + libudev: queue - _unref() should return the object + remove dead fstab_import files + hid2hci: prepare move to bluez package + set event timeout to 60 sec and settle timeout to 120 + udevd: improve error message in case exec() fails + configure: allow to enable/disable extras individually + delete hid2hci which moved to the bluez tree + update TODO/NEWS + bump requirement to Linux kernel 2.6.32 and ARM 2.6.36 + libudev: ctrl - log accept4() errors + update NEWS + update INSTALL, NEWS, configure comment, queue doc + update TODO + udevd: create queue file before daemonizing to reliably block 'settle' + udevd: remove left-over SIGALRM + gudev: silent gtk-doc warnings + cdrom_id: remove unused --export switch to silent gcc + libudev: queue - always rebuild queue file when nothing is queued anymore + libudev: device - use DEVMODE from kernel as the default mode + update TODO + Merge branch 'docs/udev.xml' of git://github.com/mfwitten/udev + udate TODO, NEWS, INSTALL + build: use --gc-sections, -fvisibility=hidden + udevadm: settle: wake up more often if --seq-start= or --exit-if-exists= is used + +Koen Kooi (1): + configure: reintroduce introspection flags to fix crosscompilation + +Michael Witten (36): + Docs: udev.xml: Offset daemon name with commas + Docs: udev.xml: Remove commas (and unnecessary repetition) + Docs: udev.xml: `are' -> `is'; the subject is `Access' + Docs: udev.xml: Use present tense + Docs: udev.xml: Clarification through proper wording + Docs: udev.xml: `,' -> `;' + Docs: udev.xml: `key value' -> `key-value' + Docs: udev.xml: `,' -> `:' + Docs: udev.xml: Use `assignment' consistently + Docs: udev.xml: `comma-separated' is a better description + Docs: udev.xml: Remove unnecessary repitition + Docs: udev.xml: Add a few more words for context + Docs: udev.xml: Use `unless' for clarity + Docs: udev.xml: Clarify PROGRAM key + Docs: udev.xml: `a shell style' -> `shell-style' + Docs: udev.xml: Clean `*' description + Docs: udev.xml: Clean character range description + Docs: udev.xml: Clean up description of NAME assignment key + Docs: udev.xml: Clean up description of SYMLINK assignment key + Docs: udev.xml: Clean up description of ENV assignment key + Docs: udev.xml: Clean up description of RUN assignment key + Docs: udev.xml: Clean up description of LABEL assignment key + Docs: udev.xml: Add missing `.' + Docs: udev.xml: `which' -> `content of which' + Docs: udev.xml: `commandline' -> `command line' + Docs: udev.xml: Clean up WAIT_FOR description + Docs: udev.xml: `a' -> `the' + Docs: udev.xml: Clean up introduction to substitutions. + Docs: udev.xml: Use normal sentence structure + Docs: udev.xml: Actually make a separate paragraph + Docs: udev.xml: Add comma + Docs: udev.xml: `char' -> `character' + Docs: udev.xml: `comma-separated' is a better description + Docs: udev.xml: Clarify through a change in word ordering + Docs: udev.xml: Improved word order + Docs: udev.xml: Fix dangling modifier + +Nix (1): + libudev: queue - accept NULL passed into udev_queue_export_cleanup() + + +Summary of changes from v167 to v168 +============================================ + +David Zeuthen (1): + Run ata_id on non-removable USB devices + +Harald Hoyer (1): + udevd: clarify worker exit status + +Kay Sievers (35): + version bump + systemd: let settle depend on trigger, do not block basic with trigger + selinux: do not label files in runtime dir + selinux: firmware - do not label files in runtime dir + udevadm: control - add --exit + trivial cleanups + udevd: log warning if /run is not writable + libudev: ctrl - fix refcounting in connection handling + udevadm: settle - watch queue file + libudev: bump revision + udevadm: info --cleanup-db + udevd: do not nice processes + "db_persist=" -> "db_persist" + udevd: move OOM disable into --daemon option + systemd: add OOMScoreAdjust=-1000 + require explicit "db_persist" to exclude device info from --db-cleanup + udevd: get netlink socket from systemd + fix more warnings + libudev: ctrl, monitor - use SOCK_NONBLOCK + systemd: socket -> sockets + udevadm: monitor - use epoll + libudev: test - use epoll + udevadm: test - use printf() instead of info() for non-debug output + use 'else if' in epoll event array loop + libudev: run_program() - select() -> epoll + udevd: ppoll() -> epoll + signalfd + Merge branch 'docs/README' of git://github.com/mfwitten/udev + timeout handling without alarm() + udevadm: settle - kill alarm() + udevd: netif rename - use ifindex for temporary name + udevd: always use udevd[] log prefix + udevd: rules files - accept empty or /dev/null links + udevd: log signal number when spawned processes fail + systemd: Reqires= -> Wants=udev.socket + udevd, udev-event: sync waitpid() error handling + +Lee, Chun-Yi (1): + Add rule for Acer Aspire One ZG8 to use acer-aspire_5720 keymap + +Leonid Antonenkov (1): + rule-generator: net - ignore Hyper-V virtual interfaces + +Martin Pitt (3): + Revert "Do not build extras with --disable-extras" + Avoid spinning up CD on pressing eject button + keymap: Another ID for Logitech Wave keyboard + +Michael Reed (1): + path_id: rework SAS device handling + +Michael Witten (12): + Docs: README: `to replace' -> `replacing' + Docs: README: `,' -> `;' + Docs: README: Clean up a sentence + Docs: README: Use present tense + Docs: README: Add missing `and' + Docs: README: Remove commas and use subjective mood + Docs: README: Clean up `udev extras' requirements + Docs: README: Clarify configuration of existing devices + Docs: README: `does never apply' -> `never applies' + Docs: README: Flip sentence structure to improve wording + Docs: README: `set up' is the verb; `setup' is a noun + Docs: README: Add a comma to offset the modifier + +Seth Forshee (1): + keymap: Support Dell Latitude XT2 tablet-mode navigation keys + +Thomas Egerer (1): + udevd: add 'N:' to optstring in getopt_long + + +Summary of changes from v166 to v167 +============================================ + +Andrey Borzenkov (1): + udev-acl: add /dev/sgX nodes for CD-ROM + +David Zeuthen (1): + cdrom_id: Don't ignore profiles when there is no media available + +Harald Hoyer (2): + cdrom_id: cd_media_toc() extend toc size to 65536 + udev-acl/70-acl.rules: tag ID_REMOTE_CONTROL with acl + +Kay Sievers (29): + version bump + Merge branch 'master' of git+ssh://master.kernel.org/pub/scm/linux/hotplug/udev + v4l_id: kill the v4l1 ioctl + v4l_id: remove left-over variable + update some comments + test-libudev: add short options + libudev: udev_device_get_sysattr_list_entry() update + libudev: resolve ifindex in udev_device_new_from_id_filename() + libudev: bump minor version + udev-acl: move sg rule to optical drive rule + move /dev/.udev/ to /dev/.run/udev/ and convert old udev database at udevd startup + NEWS: clarify /dev/.run/ requirements + input_id: silent gcc warnings + fstab_import: disable build + systemd: remove deprecated udev-retry.service + fstab_import: remove from configure + update sd-daemon.[ch] + udevd: use facility == LOG_DAEMON when writing to /dev/kmsg + udevd: initialize fds, for proper close() on exit + use /run/udev/ if possible and fall back to /dev/.udev/ + rules: run ata_id only on SPC-3 or later optical drives + systemd: bind udev control socket in systemd and split udev.service + systemd: use sockets.target not socket.target + man: remove trigger --type=failed handling + libudev: export udev_get_run_path() + libudev: docs - add udev_get_run_path() + libudev: make valgrind happy + systemd: do not enable udev-settle.service by default + systemd: udev.socket - disable implicit dependencies + +Kei Tokunaga (1): + udevadm: enumerate - update prev pointer properly + +Lee, Chun-Yi (2): + Remap Acer WMI touchpad toggle key to F21 used by X + Remap MSI Laptop touchpad on/off key to F22 and F23 + +Martin Pitt (12): + 60-persistent-input.rules: Support multiple interfaces + Only build v4l_id if V4L1 header file is available + 60-persistent-input.rules: Do not create duplicate links + Fix building with --disable-extras + Do not build extras with --disable-extras + v4l_id: Drop videodev.h check again + keymap: Fix Acer Aspire 5920G media key + input_id: Consistently use tabs for indentation + input_id: Add some debugging output + input_id: Avoid memory overflow with too long capability masks + input_id: Cover key devices which only have KEY_* > 255 + input_id: Rewrite debug logging to use standard udev info() + +Seth Forshee (1): + keymap: continue reading keymap after invalid scancodes + +Thomas Egerer (3): + libudev: allow to get list of all available sysfs attrs for a device + libudev: use sysfs attr ilist interface for attribute walk + udevadm: info - make attribute array static and const + + +Summary of changes from v165 to v166 +============================================ + +Chris Bagwell (1): + Remap Eee PC touchpad toggle key to F21 used by X + +Gerd Hoffmann (1): + extras: add rules for qemu guests + +Jürgen Kaiser (1): + keymap: Add Acer Aspire 8930 + +Kay Sievers (7): + version bump + man: generate html pages for www.kernel.org + man: fix typo + make: fix qemu rules file name + extras: qemu - fix typo + ata_id: do not print empty serial numbers to avoid unwanted trailing '_' + update gitignore + +Martin Pitt (6): + keymap: Add Acer TravelMate C310 + keymap: Update README.keymap.txt + keymap: Add Lenovo ThinkPad X201 tablet + keymap: Move reading of event in separate function + keymap: More robust state machine + keymap: Explain how to end the program + +Matthew Garrett (1): + keymap: Remove wlan from Dell + + +Summary of changes from v164 to v165 +============================================ + +Andy Whitcroft (1): + keymap: Add release quirks for two Zepto Znote models and AMILO Xi 2428 + +Bastien Nocera (2): + keymap: Add force release for HP touchpad off + extras/keymap: Make touchpad buttons consistent + +David Henningsson (1): + Add ACLs for FFADO supported sound cards + +David Zeuthen (6): + ata_id: Support SG_IO version 4 interface + Run scsi_id and ata_id on the scsi_device object + Use ata_id, not scsi_id, on ATAPI devices + Add GUdevEnumerator type and Device.get_tags() method + Add g_udev_device_get_is_initialized() method + gudev: Add Device.get_usec_since_initialized + +Harald Hoyer (2): + udev-rules.c: change import property buffer to 16384 bytes + 70-acl.rules: add ACLs for ID_PDA devices + +Jakub Wilk (1): + man: udev - workaraound -> workaround + +Jan Drzewiecki (1): + cdrom_id: Fix media state for unreadable DVDs + +Kay Sievers (19): + version bump + rules: 78-sound-card - remove specific hardware matches, they do not belong here + rules: drop OSS audio rule + rules: drop alsa jack-plug input devices + rules: revert bsg use until the event ordering problem is sorted out + libudev: do not overwrite path with readlink() call + udevadm: info - honor --export and --export-prefix for property query + udevadm: info - honor --export, --export-prefix= + udevd: use dev_t or netif ifindex as database key + udevd: always create /dev/{char,block}/$major:$minor + udevd: simplify udev database and fix DEVNAME handling + udevd: switch to common id_filename functions + udevd: write full database file for (unsupported) renamed device nodes + check ifindex > 0 instead of subsystem == "net" + libudev: enumerate - allow to filter-out not-already-initialized devices + libudev: fix renamed device nodes detection logic + libudev: record and export "age" of device record + gudev: bump minor version + update NEWS + +Martin Pitt (5): + keymap: Add Sony Vaio VGN71 + keymap: Add some more Sony Vaio VGN-* models + Add ACL for media player USB devices + keymap: Fix struck Touchpad key on Dell Latitude E series + keymap: Fix struck Touchpad key on Dell Precision M series + +Michal Soltys (1): + udevd: create static nodes before /dev/null is needed + + +Summary of changes from v163 to v164 +============================================ + +David Zeuthen (1): + Install libgudev-1.0.so in prefix / instead of prefix /usr + +Harald Hoyer (1): + cdrom_id: request the drive profile features with a dynamic length + +Kay Sievers (4): + version bump + udevd: do not wrongly delay events for devices with swapped names + return proper error code in rename_netif() + libudev: return kernel provided devnode when asked before we handled any rules + +Martin Pitt (2): + keymap: Apply force-release rules to all Samsung models. + keymap: Add Toshiba Satellite U500 + + +Summary of changes from v162 to v163 +============================================ + +David Zeuthen (2): + gudev: Deliver ::uevent signal in the thread-default main loop + Bump required GLib version to 2.22 + +Hannes Reinecke (1): + scsi_id: export target port group + +Kay Sievers (5): + version bump + scsi_id: fix compiler warnings + systemd: hook into basic.target instead of sysinit.target + systemd: sort before basic.target + udevd: add sd-daemon.c + +Lee, Chun-Yi (1): + keymap: Add alternate MSI vendor name + +Martin Pitt (8): + keymap: Add Lenovo Y550 + Clarify WAIT_FOR documentation + fix various syntax errors in rules + Add automatic rules syntax check + cdrom_id: Try reading the medium if all MMC commands fail + Revert "cdrom_id: Try reading the medium if all MMC commands fail" + cdrom_id: Fall back to CDROM_DRIVE_STATUS if all MMC commands fail + cdrom_id: Don't read beyond "last track" in TOC + +Torsten Schoenfeld (1): + gudev: add a few annotations that newer gobject-introspection versions demand + + +Summary of changes from v161 to v162 +============================================ + +David Woodhouse (1): + Add keymap for Lenovo IdeaPad S10-3 + +Jan Drzewiecki (2): + cdrom_id: Drop MEDIA_SESSION_NEXT for DVD-RW-RO + cdrom_id: Fix DVD blank detection for sloppy firmware + +Kay Sievers (10): + init: update systemd service files + init: update systemd service files + init: add 'udev -' to description in systemd service files + udevd: add pid to kmsg logs + init: edit systemd service descriptions + version bump + udevd: remove unneeded credential passing from init_notify() + set SELinux context on 'add' but not on 'change' events + systemd: enable all udev services unconditionally + Revert "Add alternative KVM MAC address blacklist" + +Luca Tettamanti (1): + Add support for oom_score_adj + +Marco d'Itri (2): + udev-acl: do not mistake all SCSI "processor" devices for scanner + do not create persistent name rules for KVM network interfaces + +Martin Pitt (12): + cdrom_id: Add media status debugging + udev(7): Point out required extension, and remove some confusion + keymap: Add Onkyo PC + keymap: Add HP G60 + keymap: Fix Sony VAIO VGN-SZ2HP/B + udev(7) manpage: Fix description of $attr + gudev: fix crash if netlink is not available + keymap: Fix Acer TravelMate 4720 + cdrom_id: Fix DVD-RW media detection + Fix KVM MAC address range + do not create persistent name rules for VMWare network interfaces + Add alternative KVM MAC address blacklist + +Michael Forney (1): + Don't install systemd scripts with --without-systemdsystemunitdir + +Michal Soltys (1): + ChangeLog fix + + +Summary of changes from v160 to v161 +============================================ + +Fortunato Ventre (1): + keymap: Add force-release quirks for a lot more Samsung models + +Harald Hoyer (3): + udev-event.c: rename interface to <src>-<dest>, if <dest> taken + rule_generator/write_net_rules: prevent interface to be named "eth" + cdrom_id: READ TOC before READ DISC INFORMATION fixes qemu + +Jan Drzewiecki (5): + cdrom_id: Fix detection of reblanked DVD+RW and DVD-RAM + cdrom_id: Handle pre-MMC2 drives + cdrom_id: Also apply format check to DVD-RW + cdrom_id: No "next session" for "other" media state + cdrom_id: Fix state for fresh DVD-RW + +Jerone Young (1): + Fix volume keys not releasing on Mivvy G310 + +Kay Sievers (12): + version bump + rules: remove firewire rules for deprecated drivers + udev-acl: update firewire matches to recent rule changes + libudev: bump minor so version after adding symbols + call util_delete_path() only when we actually deleted stuff + udev-acl: properly handle CK change events for root user + udev-acl: remove specific device matches from the rules file + fix broken "compile warning fix" + always log error when renaming a network interface fails + do not rename the database on device rename + cdrom_id: whitespace fix + cdrom_id: do not bail out when we can not read the TOC like for empty CDRW + +Marco d'Itri (3): + hid2hci: fix Logitech diNovo, MX5500 and other keyboards + log an error when a message from the wrong version of udevadm is ignored + hid2hci: fix for Logitech diNovo Edge keyboard + +Martin Pitt (1): + keymap: Generalize Samsung keymaps + +Michal Schmidt (1): + udev-acl: really fix ACL assignment in CK events + +Richard Hughes (1): + udev-acl: add DDC_DEVICE to the types that are managed + +Stefan Richter (1): + rules: add more FireWire IDs: Point Grey IIDC; AV/C + vendor unique + +Yin Kangkai (7): + udevadm: fix short options in getopt() + udevd: fix some memory leaks in error path + malloc()+memset() -> calloc() + udevd: fix short options in getopt() + udevd: fix unref'ing of device in error path + udevd: create static device links only when the target exists + udev: fix compile warning + + +Summary of changes from v159 to v160 +============================================ + +Harald Hoyer (2): + 60-persistent-storage-tape: s/path_id.sh/path_id/ + 60-persistent-storage-tape.rules: make own by-path symlink for nst tapes + +Kay Sievers (4): + version bump + rules: tape - remove WAIT_FOR instruction and don't export BSG_DEV + allow final assignment for OPTIONS:="nowatch" + udevd: init_notify() fix abstract namespace name handling + +Lennart Poettering (1): + systemd: make service files readable by GKeyFile + +Martin Pitt (2): + keymap: Find alternate Lenovo module + keymap: Add Lenovo ThinkPad SL Series extra buttons + + +Summary of changes from v158 to v159 +============================================ + +Jerone Young (1): + Fix stuck volume key presses for Toshiba Satellite U300 & U305models + +Kay Sievers (5): + version bump + add systemd service files + make: pre-process and install systemd service files when needed + make: fix 'make distcheck' + switch a few left-over from GPLv2 to GPLv2 or later + +Lennart Poettering (1): + systemd: update service files for newly introduced DefaultDependencies= option + +Martin Pitt (1): + keymap: Add Logitech Cordless Wave Pro + +Matthew Garrett (1): + keymap: Add support for IBM-branded USB devices + +Michael Meeks (1): + gudev: respect possibly given LD_LIBRARY_PATH + +Ryan Harper (2): + Add virtio-blk support to path_id + Add virtio-blk by-id rules based on 'serial' attribute + + +Summary of changes from v157 to v158 +============================================ + +Harald Hoyer (1): + extras/keymap: add Samsung N210 to keymap rules + +Kay Sievers (7): + version bump + libudev: fix fd leak in udev_enumerate_scan_devices() when tags are searched + udevd: in case we don't daemonize, send READY message to /sbin/init + delete last distro specific rules + remove a few comments in file headers + mtd_probe: add needed include, modprobe blacklist flag, and change some whitespace + rules: remove unused subdir + +Martin Pitt (4): + Fix hid2hci rules harder + add Vala vapi for gudev-1.0 + Revert "add Vala vapi for gudev-1.0" + Fix usb printer rule for multiple USB interfaces + +Maxim Levitsky (1): + mtd_probe: add autodetection for xD cards + +Paul Bender (1): + configure.ac: fix cross compilation + + +Summary of changes from v156 to v157 +============================================ + +Harald Hoyer (1): + 40-redhat.rules: removed file + +Jerone Young (3): + Fix wlan key on Inspirion 1210 + Fix wlan key on Inspiron 910 + Fix wlan key on Inspiron 1010 & 1110 + +Kay Sievers (25): + configure.ac: version bump + Makefile.am: silent build mkdir + rules: mount fuse control filesystem + fix compilation with --enable-debug + while (1) -> for (;;) + childs -> children + udevd: replace --debug-trace with --children-max + udevd: fix comments + rules: add -v to modprobe calls to be able see what will be loaded + udevd: read debug settings from kernel commandline + update NEWS + rules: delete pilot rules and remove redhat directory + man: add static device nodes and udevd debug options + man: add kernel command line parameters + man: udevd - update intro + rules: rename packages -> arch + rules: SUSE - move last distro rule to package + rules: add misc/30-kernel-compat.rules + make: mkdir /lib/udev/devices/ + make: fix rules/ subdir names + udevd: set umask before creating files/directories + add IMPORT{cmdline} + IMPORT{cmdline}: start at first char after '=' + libudev: doc - fix typo + update NEWS + + +Summary of changes from v155 to v156 +============================================ + +Bryan Kadzban (1): + udevd: fix typo /proc/fd -> /proc/self/fd + +Kay Sievers (4): + configure.ac: version bump + cdrom_id: do not export ID_CDROM_MEDIA_SESSION_LAST_OFFSET= for single session media + rules: optical drives - use ID_CDROM_MEDIA_TRACK_COUNT_DATA + libudev: fix udev_queue_get_seqnum_sequence_is_finished() with empty queue file + + +Summary of changes from v154 to v155 +============================================ + +Kay Sievers (11): + reset process priority before executing RUN+= + configure.ac: version bump + rules: SUSE - delete device-mapper rules + libudev: add O_CLOEXEC + use default mode of 0600 for nodes if gid == 0 + udevd: create standard symlinks and handle /lib/udev/devices + update NEWS README + fix tests and allow MODE=000 + create static nodes provided by kernel modules to allow module autoloading + update NEWS + man: directly use 'refentry' + + +Summary of changes from v153 to v154 +============================================ + +Harald Hoyer (2): + Makefile.am: add LGPL COPYING file to EXTRA_DIST + cdrom_id: only mark sr[0-9]* as ID_CDROM + +Jerone Young (1): + Fix volume keys not releasing for Pegatron platform + +Kay Sievers (23): + configure.ac: version bump + more readlink buffer size handling + remove left-over from ignore_remove and all_partitions + fix previous commit + udevadm: info --export-db -- remove watch handle export + add TAG= to improve event filtering and device enumeration + all to match against a given TAG== + udev-acl: use a tag instead of a property to mark devices + fix logic on-demand loading logic for db and uevent + use the usual TAG+=, TAG= logic + delete old tags when configuration changes + libudev: accept NULL in udev_device_get_tags_list_entry() + export tag functions + export udev_device_get_tags_list_entry() + udevd: always try to find an idle worker instead of forking a new one + remove unused parameter from udev_node_mknod() + remove debug output during rules parsing + warn when renaming kernel-provided nodes instead of adding symlinks + man: udevadm trigger - the default is "change" not "add" + update README regarding kernel version and default rules + add info message when empty NAME is given + libudev: add documentation for recently added functions + udevd: reload config only for *.rules files + +Martin Pitt (1): + keymap: Fix Bluetooth key on Acer TravelMate 4720 + +Mathias Nyman (1): + remove buffer-overrun risk in readlink call + +Matthias Schwarzott (1): + rules: Gentoo - remove old devfs compat rules + +Michael Thayer (1): + fix device node deletion + +Robby Workman (1): + configure.ac: move firmware-path setting out of extras section + +Yin Kangkai (2): + keymap: Add keymap and force-release quirk for Samsung N128 + keymap: Add keymap quirk of WebCam key for MSI netbooks. + + +Summary of changes from v152 to v153 +============================================ + +Kay Sievers (1): + configure.ac: version bump + +Robby Workman (1): + configure.ac: fix broken firmware search path in configure.ac + + +Summary of changes from v151 to v152 +============================================ + +Adrian Bunk (1): + udev needs automake 1.10 + +Amit Shah (2): + Fix virtio-ports rule to use $attr instead of $ATTR + rules: virtio - fix is to check if the 'name' attribute is present + +Andy Whitcroft (2): + keymap: Add Samsung Q210/P210 force-release quirk + keymap: Add Fujitsu Amilo 1848+u force-release quirk + +Dan Williams (1): + modeswitch: morph into tool that only switches Mobile Action cables + +David Zeuthen (3): + Decrease buffer size when advancing past NUL byte + Use UTIL_LINE_SIZE, not UTIL_PATH_SIZE to truncate properties + Increase UTIL_LINE_SIZE from 2048 to 16384 + +Harald Hoyer (1): + cdrom_id: remove debugging code + +Jerone Young (6): + Force key release for volume keys on Dell Studio 1557 + Fix Keymapping for upcoming Dell Laptops + Add new Dell touchpad keycode + Revert special casing 0xD8 to latitude XT only + Fix Dell Studio 1558 volume keys not releasing + Add support for another Dell touchpad toggle key + +Kamal Mostafa (3): + keymap: Unite laptop models needing common volume-key release quirk + keymap: Add force-release quirk for Coolbox QBook 270-02 + keymap: Add force-release quirk for Mitac 8050QDA + +Kay Sievers (43): + libudev: bump minor version + udevadm: fix untested and broken commit to set buffer size + configure.ac: version bump + udev-acl: no not encourage use of ACL_MANAGE outside of rules file + replace utimes() with utimensat() + libbudev-private: rename udev_list_entry_get_flag() + udevadm: monitor - use / as separator in --subsystem-match=subsystem[/devtype] + use major:minor as entries in symlink stack instead of devpath + use major:minor as entries in watch directory + libudev: docs - .gitignore backup files + firmware: fix possible segfault when firmware device goes away while loading + do not reset SELinux context when the node was not touched + libudev: add udev_device_new_from_environment() + add LGPL COPYING to libudev and GUdev + cdrom_id: open non-mounted optical media with O_EXCL + libudev: update documentation + extras: mobile-action-modeswitch - update gitignore + scsi_id: add rand() in retry loop + cdrom_id: retry to open the device, if EBUSY + cdrom_id: check mount state in retry loop + cdrom_id: always set ID_CDROM regardless if we can run cdrom_id + rules: delete outdated packagees rules + rules: we do not have static devices which are renamed + unify/cleanup event handling + allow IMPORT{db}="KEY" + usb-db: remove double '/' + replace "add|change" with "!remove" + update NEWS + log info only if we actually delete the node + udevadm: trigger - switch default action from "add" to "change" + remove "all_partitions" option + rules: call modprobe on all events but "remove" + remove "ignore_remove" option + update NEWS + cdrom_id: rework feature/profiles buffer parsing + cdrom_id: print more debug messages + cdrom_id: debug - print feature values in hex + cdrom_id: debug - print feature values in hex + cdrom_id: set ID_CDROM_MEDIA=1 only for known media + Revert "Fix switching Logitech bluetooth adapters into hci mode." + add O_NOFOLLOW when creating files in link stack + delete only device nodes, not symlinks when deleting a devtmpfs node + doc: add section about how *not* to rename device nodes + +Marco d'Itri (3): + rules: input - create by-path/ links for pci devices + Fix switching Logitech bluetooth adapters into hci mode. + doc: document the WAIT_FOR timeout + +Martin Pitt (12): + keymap: Add Dell Inspiron 1011 (Mini 10) + Fix brightness keys on MSI Wind U-100 + keymap: Fix LG X110 + keymap: Add Toshiba Satellite M30X + udev-acl: Correctly handle ENV{ACL_MANAGE}==0 + input_id: Fix linking + keymap: Add Acer TravelMate 6593G and Acer Aspire 1640 + keymap: Fix another key for Acer TravelMate 6593 + cdrom_id: Fix uninitialized variables + cdrom_id: Fix uninitialized buffers + cdrom_id: Do not ignore errors from scsi_cmd_run() + cdrom_id: Swap media state and TOC info probing + +Mike Brudevold (1): + cdrom_id: add missing profiles to feature_profiles + +Robert Hooker (1): + keymap: Add support for Gateway AOA110/AOA150 clones. + +Scott James Remnant (2): + libudev: export udev_monitor_set_receive_buffer_size() + udevadm monitor: increase netlink buffer size + +Thomas Bächler (1): + firmware: fix error reporting on missing firmware files + +Yury G. Kudryashov (3): + configure.ac - fix typo in --with-pci-ids-path option + hid2hci: include linux/types.h for __u32 + configure.ac: ddd --with-firmware-path option + + +Summary of changes from v150 to v151 +============================================ + +Amit Shah (1): + rules: Add symlink rule for virtio ports + +Bryan Kadzban (1): + Fix reverted floppy-device permissions + +Egbert Eich (1): + rulews: suse - add do-not-load-KMS-modules rules + +Frederic Crozat (1): + rules: acl - add COLOR_MEASUREMENT_DEVICE match + +Kay Sievers (11): + configure.ac: version bump + udevd: inotify - do not parse rules at create but at close + do not remove device nodes of active kernel devices + libudev: device - create db file atomically + clarify message about not removed device node + input_id: include limits.h + keymap: include linux/limits.h + keymap: linux/input.h - get absolute include path from gcc + delete outdated and unmaintained writing_udev_rules + update README and NEWS + update tests + +Marco d'Itri (2): + writing_udev_rules: update rules files names + keymap: support for the Samsung N140 keyboard + +Martin Pitt (4): + add ACL rule for Garmin GPSMap 60 + keymap: move force-release directory + extras/keymap/check-keymaps.sh: Ignore comment-only lines + keymap: Fix invalid map line + + +Summary of changes from v149 to v150 +============================================ + +Clemens Buchacher (2): + add Samsung R70/R71 keymap + keymap: Samsung R70/R71 force-release quirk + +Daniel Drake (2): + keymap: Add OLPC XO key mappings + keymap: Fix typo in compal rules + +Daniel Elstner (1): + libudev: wrap in extern "C" block for C++ + +David Zeuthen (1): + Export ID_WWN_VENDOR_EXTENSION and ID_WWN_WITH_EXTENSION + +Jerone Young (1): + keymap: Lenovo Thinkpad USB Keyboard with Tracepoint + +Johannes Stezenbach (2): + keymap: add Samsung N130 + keymap: handle atkbd force_release quirk + +Kay Sievers (15): + util_unlink_secure(): chmod() before chown() + floppy: fix rule to create additional floppy device nodes + configure.ac: version bump + remove remaining support for CONFIG_SYSFS_DEPRECATED + cdrom_id: remove deprecated device matches + rules: add "block" match to floppy rule + update mtime of nodes and links when we re-use them + udevadm: info - fix info --root --query=name --path= for device without a device node + remove remaining support for CONFIG_SYSFS_DEPRECATED + fix typo in log message priority handling + remove UDEV_RUN environment variable + udevadm: logging - copy va_list and do not use it twice + libudev: doc - add symbols to sections.txt + work around gtk-doc which breaks distcheck + gobject-introspection: use $datadir instead of $prefix + +Marco d'Itri (2): + build: keymap - create subdir + rules: udev-acl - add firewire video devices + +Martin Pitt (12): + keymap: Add Acer Aspire 1810T + 95-keymap.rules: Run on change events, too + keymap: fix findkeyboards + Speed up udev_enumerate_scan_* + keymap: Add hotkey quirk for Acer Aspire One (AO531h/AO751h) + Clarify RUN/IMPORT documentation + keymap: Add Logitech S510 USB keyboard + keymap: add Acer TravelMate 8471 + keymap: Add Acer Aspire 1810TZ + keymap: Add LG X110 + keymap: Add Fujitsu Amilo Li 1718 + keymap: Document force-release + +Piter PUNK (1): + firmware: convert shell script to C + +Scott James Remnant (1): + 70-acl.rules: ACL manage Android G1 dev phones + +Thomas de Grenier de Latour (1): + libudev: enumerate - fix move_later logic + + +Summary of changes from v148 to v149 +============================================ + +Daniel Elstner (1): + really fix both in-tree and out-of-tree builds + +Dmitry Torokhov (1): + input-id: identify touchscreens + +Kay Sievers (4): + libudev: doc - use #NULL + configure.ac: version bump + really really fix both in-tree and out-of-tree builds + fix both in-tree and out-of-tree builds + +Martin Pitt (6): + input_id: Fix endless loop for non-input devices + input_id: Do not tag non-input devices with ID_INPUT + input_id: small optimization + input_id: check event mask + input_id: Check mouse button for ID_INPUT_MOUSE + udev_device_get_parent_with_subsystem_devtype(): Clarify documentation + + +Summary of changes from v147 to v148 +============================================ + +Dan Williams (3): + Revert "modem-modeswitch: add a device" + Revert "extras/modem-modeswitch: Add Huawei E1550 GSM modem" + modem-modeswitch: 61-option-modem-modeswitch.rules is only for Option NV devices + +Daniel Mierswa (1): + Fix typo in NEWS, ConsoleKit-0.4.11 -> 0.4.1 + +David Zeuthen (4): + cdrom_id: Still check profiles even if there is no media + scsi_id: Export WWN and Unit Serial Number + Create /dev/disk/by-id/wwn-0x... symlinks + Also create /dev/disk/by-id/wwn-0x..-part%n symlinks for partitions + +Dmitry Torokhov (1): + extras/input_id: Correctly identify touchpads + +Harald Hoyer (1): + modem-modeswitch: add a device + +Kay Sievers (8): + rules: set mode of floppy device nodes to 0660 + remove "ignore_device" + print warning for BUS=, SYSFS{}=, ID= + test-udev: remove "ignore_device" code + udev-test.pl: catch-up with recent changes + rules: remove support for IDE (hd*) devices + ata_id: skip ATA commands if we find an optical drive + Revert "Fix out-of-tree builds" + +Martin Pitt (5): + README.keymap.txt: small clarification + extras: Add input_id + 70-acl.rules: Use new-style input properties + input: Deprecate ENV{ID_CLASS} + input_id: code cleanup + +Scott James Remnant (1): + Fix out-of-tree builds + + +Summary of changes from v146 to v147 +============================================ + +Alan Jenkins (1): + udevd: queue-export - remove retry loop + +Andrew Church (1): + fix wrong parameter size on ioctl FIONREAD + +Daniel Mierswa (2): + don't compare a non-existing function with NULL + use nanosleep() instead of usleep() + +David Zeuthen (4): + gudev: remove G_UDEV_API_IS_SUBJECT_TO_CHANGE since API is now stable + ata_id: export more advanced ATA features + gudev: Fix up GUdevDeviceNumber + gudev: Remove LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE from priv header + +Florian Zumbiehl (10): + util_delete_path(): use util_strscpy() + util_lookup_group(): fix memory leak if realloc() fails + util_delete_path(): handle multiple leading slashes + util_create_path(): fix possible out of bounds array access + ude_rules.c: fix possible NULL pointer dereference in get_key() + util_resolve_sys_link(): fix possible buffer overflow + udev_util_encode_string(): fix possible buffer overflow + udev-rules.c: parse_file() - fix possible buffer overflow + udev_queue_get_seqnum_sequence_is_finished(): fix possible file handle leak + util_run_program(): fix possible buffer overflow #2 + +Harald Hoyer (2): + scsi_id: prevent buffer overflow in check_fill_0x83_prespc3() + rename interfaces to <iface>_rename if rename fails + +Jeremy Kerr (1): + util_run_program: restore signal mask before executing event RUN commands + +Kay Sievers (45): + make: sort Makefile.am per target/extra + configure.ac: version bump + udev-acl: allow to skip ACL handling + rules: rfkill has no group, so use 0644 + rule_generator: net - fix MATCHDEVID + make: add comment + update NEWS + print warning for NAME="%k" - it breaks the kernel supplied DEVNAME + warn about non-readable or empty rules file + change database file names + assign errno for getgrnam_r()/getpwnam_r() + doc: udevadm test *does* create nodes and links these days + util_unlink_secure(): chmod() before chown() + util_create_path(): fix errno usage + inotify_add_watch(): do not store watch, if it failed + update TODO + update README + rules: suse - use NAME for mapper/control + libudev-util.c: get_sys_link() - return error for empty link target + udev-rules.c: remove 'first_token' variable + Revert "udev-rules.c: remove 'first_token' variable" + test: catch possible bug in GOTO resolving + udevadm: remove symlink support for old commands + util_run_program(): skip multiple spaces in argv creation + fix whitespace + require 2.6.27 for proper signalfd handling + fix randonm findings from llvm-clang-analyzer + simplify "symlink name stack" + reorder create_path() and node/link creation to be called in a direct sequence + put util_create_path() and file creastion in a retry loop + udevadm: control - remove compat code + scsi_id: delete copy of bsg.h + fix SYMLINK{} option parsing + rules: remove remaining NAME="%k" + rules: drop almost all NAME= keys + update TODO, NEWS + udevd: serialize events for with the same major/minor + break loops if util_create_path() returns error + remove "last_rule" option + use CLOEXEC flags instead of fcntl() + unblock signals we might want to handle + udevd: create /dev/.udev/rules.d/ before watching it wit inotify + gudev: fix pkg-config call to work with "make distcheck" + update NEWS + Revert "gudev: fix out-of-tree build" + +Lennart Poettering (5): + pci-db: make sure we actually read the pci.ids file instead of usb.ids + sound: recognize saa7134 TV card sound devices as TV cards + sound: include ALSA sound card id in ID_ID property + sound: include ALSA sound card id in /dev/snd/by-id/ links + Revert "sound: include ALSA sound card id in /dev/snd/by-id/ links" + +Marco d'Itri (6): + doc: writing_udev_rules updated for the new command names + rules: sound - do not use /usr/bin/env + udevadm: print all messages to stderr with priority higher or equal than LOG_ERR + udevadmi: control = exit with rc=2 if there is some system error + gudev: gir-scanner workaround for out of tree builds + gudev: fix out-of-tree build + +Mario Limonciello (1): + hid2hci: remove superfluous bmAttributes match + +Martin Pitt (24): + extras/keymap: Add Acer Aspire 6920 + extras/modem-modeswitch: eject ZTE MF6xx fake CD-ROMs + extras/keymap: Fix hold key on Acer Aspire 6920 + extras/keymap: Fix case matching for Micro-Star + Revert "extras/keymap: Fix case matching for Micro-Star" + make raw USB printer devices accessible for lp + modem-modeswitch rules: Match more devices + extras/keymap: fix hash table collisions + extras/keymap: Rename KEY_COFFEE to KEY_SCREENLOCK + fix single-session CD detection + fix previous commit for CD detection + make raw USB printer devices world-readable again + 50-udev-default.rules: fix printer MODE + keymap: Add Logitech Wave USB + keymap: add missing map file + keymap: fix usb_id invocation + keymap: make USB keyboards really work + keymap: Add Logitech Wave cordless + keymap: add HP Pavillion dv6315ea + keymap: add HP 2230s + Makefile.am: fix build with mawk + extras/keymap/README.keymap.txt: Fix bug report link + fix major fd leak in link handling + modem-modeswitch: fix ZTE MF6xx rule + +Matthias Schwarzott (2): + rules: Gentoo update + rules: Gentoo update + +Maxim Levitsky (1): + keymap for Acer Aspire 5720 + +Peter Rajnoha (1): + libudev: allow to store negative values in the udev database + +Scott James Remnant (1): + util_run_program: *really* restore signal mask before executing event RUN commands + +William Jon McCann (1): + udev-acl: catch up with ConsoleKit 0.4.1 + + +Summary of changes from v145 to v146 +============================================ + +Alan Jenkins (3): + man: fix unused, inaccurate metadata + man: SYMLINK can be matched as well as assigned + fix spelling + +Anssi Hannula (2): + rules: exclude digitizers from joystick class + udev-acl: add joystick devices + +Diego Elio 'Flameeyes' Pettenò (21): + Merge libudev, udev, and the unconditional extras in a single Makefile.am. + Replace the custom test-run target with the standard make check. + Also merge into the top-level Makefile.am the simpler extras. + Change hook handling to be more portable. + Merge keymap building in the top-level Makefile.am. + Make keymap generation rules be silent (backward-compatible). + Move pkg-config docs and man pages before conditionals. + Finally, also merge gudev into the top-level Makefile.am. + Make sure to clean up all the built sources. + Make sure to use dependency/target variables. + Add silent-rule support for the gudev rules. + Fix building of introspection library on top-level Makefile.am. + Fix another relative path for the new working directory. + Include the correct directory for out-of-source builds. + Add tests to the distribution; this fixes "make distcheck". + Ask gperf to use ANSI-C for generation. + Merge in Makefile.am.inc into Makefile.am + Use the keymap check during “make distcheck” rather than “check”. + Fix building of documentation when doing out-of-source builds. + Fix “make distcheck” run outside of the source directory. + Use LT_INIT to explicit that udev needs libtool series 2. + +Eric W. Biederman (1): + fix util_lookup_group to handle large groups + +Erik Forsberg (1): + extras/modem-modeswitch: Add Huawei E1550 GSM modem + +Kay Sievers (18): + udevd: add timestamp to --debug output + v4l_id: exit with 0 when --help is given + configure.ac: version bump + hid2hci: remove hid structures and include kernel header + path_id: make global variable static + udevadm: trigger - add --sysname-match= + rules: serial - fix path_id call + path_id: fix typo in comment + format names are not case insensitive + hid2hci: rewrite (and break) rules and device handling + make: build internal tools against libudev-private.la + update a few years of copyright + libudev: silent gcc warning: may be used uninitialized in this function + make: suppress enter/leaving directory messages + re-enable failed event tracking + "record_failed" -> "fail_event_on_error" + udevd: block for 15 seconds after error when too old kernel is detected + make: fix issues from non-recursive conversion + +Lennart Poettering (1): + enumeration: move ALSA control devices to the end of the enumerated devices of each card + +Mario Limonciello (2): + hid2hci: support to hid2hci for recovering Dell BT devices after S3 + hid2hci: install re-trigger for hid device when recovering from S3 + +Martin Pitt (17): + add keymap for Clevo D410J laptop + extras/keymap: add Zepto ZNote + extras/keymap: add Everex Stepnote XT5000T + extras/keymap: add Compal Hel80i + keymap tool: improve help + keymap tool: support scancode/keycode pair arguments + keymap: inline one-line key maps + extras/keymap: fix check-keymaps.sh for inline mappings + extras/keymap: add recently added keymap files to Makefile.am + extras/keymap: Add HP Presario 2100 + extras/keymap: cover more Compaq Evo models + extras/keymap: Add Fujitsu Amilo M + extras/keymap: teach findkeyboards about USB keyboards + extras/keymap: Add Samsung SX22S + extras/keymap: Fix crash for unknown keys + extras/keymap: Add Samsung NC20 + extras/keymap: Fix Bluetooth key on Acer Aspire 6920 + + +Summary of changes from v144 to v145 +============================================ + +Ian Campbell (1): + scsi_id: correct error handling in prepend_vendor_model + +Kay Sievers (10): + README: add CONFIG_BLK_DEV_BSG + use MIN() MAX() from param.h + configure.ac: version bump + libudev: device - free values before updating them + libudev: enumerate - sort with qsort() + udevd: detach event from worker if we kill a worker + udevadm: info - add space after R:, A:, W: on database export + udevd: make sure a worker finishes event handling before exiting + udevd: handle SIGCHLD before the worker event message + udevd: use bool + + +Summary of changes from v143 to v144 +============================================ + +Jon Masters (1): + firmware: search for third party or sysadmin supplied firmware updates + +Kay Sievers (19): + configure.ac: add AM_SILENT_RULES + configure.ac: version bump + TODO: add cleanup of ATA_COMPAT + libudev: queue - add comments for queue format + udev/.gitignore: add udev.pc + configure.ac: version bump + do not exports properties starting with a '.' + scsi_id: --reformat_serial - use udev_util_replace_whitespace() + ata_id: sync ID_SERIAL(_SHORT) with other *_id tools + rules: make ata_id properties the default for all ATA block devices + scsi_id: delete no longer needed config file + update NEWS + man: udev - add private properties like ENV{.FOO}="bar" + Merge branch 'firmware' of git://git.kernel.org/pub/scm/linux/kernel/git/jcm/udev-jcm + udevadm: test - print list of properties + build: do not delete .la files + libudev: monitor - handle kernel supplied DEVNAME properly + update NEWS + build: add *exec* to the internal rootlibdir name + +Martin Pitt (2): + hid2hci: narrow matches to real HCI devices + extras/udev-acl: add smartcard readers + +Stefan Richter (1): + rules: set group ownership of new firewire driver device files + + +Summary of changes from v142 to v143 +============================================ + +Alan Jenkins (5): + udevadm: settle - fix timeout + udevd: remove tiny bit of dead code + udevd: implement a more efficient queue file format + udev-selinux.c: remove libudev header + udevd: queue-export - fix crash + +Benjamin Gilbert (1): + test: check string substitutions in OWNER and GROUP + +Dan Williams (2): + rules: tty/net - move from udev-extras + extras/modem-modeswitch: move from udev-extras + +David Zeuthen (1): + gudev: move from udev-extras + +Kay Sievers (95): + version bump + rules: v4l do not mix vbi and video nodes + fix possible endless loop for GOTO to non-existent LABEL + Revert "rules: v4l do not mix vbi and video nodes" + rule-generator: cd - skip by-path links if we create by-id links + remove format char string truncation syntax + use more efficient string copying + edd_id: use openat() + use openat(), unlinkat(), fstatat() + update TODO + remove unused GL_FORMAT from rules parser + require key names in uppercase + keep the ifdef'd udevd testing/profiling hack + fix location of database files + udevadm: settle - make --timeout=0 working + update NEWS + rules: add SUBSYSTEM match to scsi rules + cdrom_id: suppress ID_CDROM_MEDIA_STATE=blank for plain non-writable CDROM media + udevadm: control - add comment to man page about --reload-rules + cdrom_id: add error message if open() fails + udevadm: settle - add --exit-if-exists=<file> + udevd: remove check for dev_t, DEVPATH_OLD takes care of that + str[sp]cpyl: add __attribute__ ((sentinel)) + udevd: convert to event worker processes + udevd: close netlink socket in worker and set cloexec + rules: do not call path_id for virtual devices + udevd: use enum instead of char in struct declaration + allow format substitution in path of ATTR{<path>}=="<value>" + cleanup $attr{} substitution + path_id: implement in C using libudev + path_id: update SCSI handling + path_id: add comments + fix signed/unsigned warning + libudev: enumerate - allow multiple keys with the same name + udevadm: trigger - add --property-match=<key>:<value> + udevadm: info - accept --query without a value and print properties + udevadm: control - --env -> --property + udevadm: monitor --environment -> --property + path_id: handle fibre channel + path_id: add iscsi support + path_id: delete old shell script + udevd: print error if worker dies unexpectedly + path_id: rename scsi sub-fuctions + libudev: add comments to libudev.h + libudev: move to top-level directory + fix libudev include in Makefile.am.in + libudev: device_new() -> udev_device_new() + udevd: log info for created/killed workers + libudev: call log functions conditionally + move syslog wrapper to libudev + move common stuff from udev/ to private parts of libudev/ + libudev: rename private files to *-private.c + rules: remove scsi ch module loading rule + update NEWS + udevadm: info -revert "accept --query without argument" + README: add kernel options + README: add INOTIFY and SIGNALFD + USE_LOG -> ENABLE_LOGGING, DEBUG -> ENABLE_DEBUG, USE_SELINUX -> WITH_SELINUX + libudev: add gtk-doc + libudev: update documentation + libudev: doc - add section headers + libudev: doc - add enumerate + libudev: doc - add queue + update TODO + libudev: doc - add namespace for index + libudev: move .so version to libudev Makefile + autogen.sh: simplify + TODO: update + libudev: remove prefix from .so version variables + libudev: doc - add empty libudev.types + udev-acl: move from udev-extras + INSTALL: add --enable-extras + udev-acl: handle missing action when called in CK mode + v4l_id: move from udev-extras + libudev: doc - libudev-docs.sgml -> libudev-doc.xml + gudev: fix typo in configure option + v4l_id: 70-v4l.rules -> 60-persistent-v4l.rules + configure: enable all extras by default, provide --disable-extras + autogen.sh: make "CFLAGS=-O0 ./autogen.sh" working + NEWS: add --disable-extras + cleanup ./configure installation directory options + rules: remove MMC rule, 2.6.30 has the modalias + configure.ac: print error if gperf is missing + libudev: install in $libdir and move later to $rootlibdir + extras/keymap: use LIBEXECDIR instead /lib/udev + README: add /lib/udev/ is private + rules: do not install usb-id/pci-id rules when --disable-extras is used + extras: delete man pages for private udev tools + README: update + extras/keymap: install findkeyboards in /lib/udev + INSTALL: use /sbin instead of %{sbindir} + NEWS: update + udev.pc: add + Merge branch 'master' of git+ssh://master.kernel.org/pub/scm/linux/hotplug/udev + docs: install writing_udev_rules + +Lennart Poettering (2): + rules: sound - move from udev-extra + usb-db: move from udev-extras + +Marcel Holtmann (1): + rules: make RFKILL control device world readable + +Mario Limonciello (1): + hid2hci: move from udev-extras + +Martin Pitt (5): + keymap: move from udev-extras + extras/keymap: Fix WLAN button on ThinkPads + keymap: Update findkeyboard path in docs + udev-acl: Manage hplip device permissions + extras/keymap: Update findkeyboards location + +Matthias Schwarzott (3): + rules: Gentoo update + rules: Gentoo update + rules: Gentoo update + +Scott James Remnant (1): + OWNER/GROUP: fix if logic + + +Summary of changes from v141 to v142 +============================================ + +Andre Przywara (1): + rules: create /dev/cpu/<n>/cpuid world readable + +Ian Campbell (1): + path_id: support identification of Xen virtual block devices + +John Wright (1): + edd_id: add cciss devices + +Kay Sievers (46): + version bump + libudev: path_encode - always return 0 if encoded string does not fit into size + libudev: monitor - clarify socket handling documentation + udevd: log error for too old kernels or CONFIG_SYSFS_DEPRECATED + rules: remove DVB shell script + update NEWS + cdrom_id: add Xen cdrom support + test-libudev: update monitor source + TODO: add packet filter + update NEWS + cdrom_id: add and use ID_CDROM_MEDIA to decide if we run vol_id + libudev: monitor - add client socket filter for subsystem value + udevadm: monitor - print error if we can not bind to socket + update TODO + udevadm monitor - add --subsystem-match= + libudev: monitor - use simpler hash + libudev: monitor - switch to filter_add_match_subsystem_devtype() + libudev: monitor - do not filter messages with wrong magic + udevadm: monitor - add <subsytem>:<devtype> support + libudev: monitor - add udev_monitor_filter_remove + libudev: queue - fix get_seqnum_is_finished() + cdrom_id: skip media tests if CDROM_DRIVE_STATUS != CDS_DISC_OK + libudev: queue - clarify comments + libudev: monitor - export filter_update() + update NEWS + drop "extern" keyword from non-static function + rule_generator: net - fix usb comment generation + rules: input - add links for USB/platform non-kbd/mouse devices + rules: input - fix comments + rules: add rfcomm* to group dialout + accept DEVNAME from the kernel as a hint for the node name + update TODO + build: use AC_MSG_RESULT + rules: add "event*" match + udevd: revert initial device node creation + rules: remove initramfs comment + handle devtmpfs nodes + oops, removed ppp entry from rules got committed + remove all PHYSDEVPATH handling and warning about + remove asmlinkage + rules: fix ieee1394 rules + add "static" back to the inline functions + update TODO + delete vol_id and require util-linux-ng's blkid + delete libvolume_id + +Lubomir Rintel (1): + rule-generator: net - whitelist NICs that violate MAC local scheme + + +Summary of changes from v140 to v141 +============================================ + +Adam Buchbinder (4): + usb_id: add manpage + cdrom_id: update manpage + create_floppy_devices: expand manpage + vol_id: fix language in manpage + +Alan Jenkins (1): + avoid leaking netlink socket fd to external programs + +Borislav Petkov (1): + rules: rename ide-floppy to ide-gd + +David Brownell (1): + rules: exclude mtd* from persistent disk links + +Kay Sievers (15): + rules: fix extra quote in 50-udev-default.rules + version bump + udevadm: test - handling trailing '/' in devpath + udevadm: monitor - clarify printed header + rules: remove ram* from persisten disk links blacklist + rules: serial - support ttyACM devices + rules: replace IDE driver with media match + usb_id: add ID_VENDOR_ID, ID_MODEL_ID, ID_USB_INTERFACE_NUM, ID_USB_DRIVER + libudev: GPL -> LGPL + usb_id: remove unused variable + send monitor events back to netlink socket + "UDEV_MONITOR_KERNEL/UDEV" -> "kernel/udev" + IMPORT: 2048 -> 4096 bytes buffer + path_encode: fix max length calculation + libudev: monitor - unify socket message handling + +Michal Soltys (1): + rules: md-raid.rules fix + +Robby Workman (1): + udevadm: trigger - add "--action" to --help + +Scott James Remnant (1): + libudev: monitor - ignore messages from unusual sources + + +Summary of changes from v139 to v140 +============================================ + +Harald Hoyer (1): + libvolume_id: bump age + +Kay Sievers (12): + version bump + update TODO + volume_id: ntfs - fix uuid setting + update TODO + rules: Fedora update + libudev: queue - use lstat() to check existence of symlink + udevadm: settle - add --seq-start= --seq-end= + udevd: switch watch symlinks to devpath + udevadm: add text for new options to command and man page + update TODO + libudev: ctrl - return error after sending ctrl message + udevadm: settle - use timeout signal, instead of loop counter + +Michael Prokop (1): + fix compile error in debug mode + +Scott James Remnant (1): + udevadm: settle - synchronise with the udev daemon + + +Summary of changes from v138 to v139 +============================================ + +Kay Sievers (11): + version bump + remove static local variable + use the event udev_device to disable the watch on "remove" + add "nowatch" to disable a default installed watch with a later rule + add m4/ subdir + use AC_USE_SYSTEM_EXTENSIONS instead of AC_GNU_SOURCE + usb_id: add ID_USB_INTERFACES=:0e0100:0e0200:010100:010200: + usb_id: return values if called directly for an usb_device + usb_id: fix NULL string usage + usb_id: fix comment + udevadm: info - export all devices with --export-db + +Scott James Remnant (10): + Don't add inotify watch until RUN rules processed. + Clear existing inotify watch before processing. + Cleanup a little. + Allow watch handle to be stored in the udevdb. + Store watch handle in db. + Use the udevdb to speed up watch clearing. + Put a log message in a more sensible place. + Output watch handle in udevadm info. + lookup the old watch handle; reload only if has a path + Look at more inotify events in the buffer than just the first. + + +Summary of changes from v137 to v138 +============================================ + +David Zeuthen (1): + *_id: add model/vendor enc strings + +Karel Zak (2): + vol_id: fix ddf version string + vol_id: add missing id->type to swap0 + +Kay Sievers (13): + man: fix grammar + version bump + fix NAME="" logic + rules: dm - add escape for uuid links with whitespace + test: add test for empty and non-existent ATTR + rules: fix md "change"/"remove" handling + autogen.sh: add more warnings + fix NAME= and OPTION+="string_escape=..." logic + rules: move OPTIONS to separate rule + use global "reload_config" flag + rules: add "watch" option to dm and md rules + rules: include loop block devices in persistent links + release 138 + +Matthias Schwarzott (1): + rules: Gentoo update + +Miklos Vajna (1): + doc: writing udev rules - refer to 'udevadm info' instead of 'udevinfo' + +Scott James Remnant (2): + udevd: optionally watch device nodes with inotify + rules: update persistent storage rules to use inotify watches + + +Summary of changes from v136 to v137 +============================================ + +Alan Jenkins (2): + man: typo fixes + remove stray initializer + +Kay Sievers (17): + version bump + rules: fix typo in ide cd rule + libudev: use 4096 bytes buffer for attribute reading + rules: add drm devices to group "video" + do not complain about a missing /etc/udev/rules.d/ + udevadm: test - remove --force option + update NEWS + remove name from index if the node name has changed + cleanup old names before creating the new names + open-code pollfd setup + increase netif renaming timeout from 30 to 90 seconds + Merge commit '5f03ed8a56d308af72db8a48ab66ed68667af2c6' + Merge commit '9032f119f07ad3b5116b3d4858816d851d4127de' + split up long line + udevd: add back SA_RESTART + usb_id: handle ATAPI devices like SCSI devices + udevadm: settle - fix typo + +Lennart Poettering (1): + fix naming for tape nst devices in /dev/tape/by-path/ + +Olaf Kirch (2): + udevd: use ppoll instead of signal pipes + reap children faster + +Scott James Remnant (2): + Allow user and group lookup to be disabled. + Expose delayed name resolution + +Sven Jost (1): + volume_id: support via raid version 2 + + +Summary of changes from v135 to v136 +============================================ + +Adam Buchbinder (1): + extras: fix mis-spelling of "environment" + +Harald Hoyer (1): + rule_generator: fix enumeration for write_cd_rules + +Jeremy Higdon (1): + path_id: rework SAS persistent names + +Karel Zak (1): + volume_id: HPFS code clean up + +Kay Sievers (54): + rules: ATA_COMPAT do not try to match on sr*, it will never have vendor ATA + scsi_id: do not fail if no serial is found like for optical drives + update configure and NEWS + rules: fix isdn rules + rules: add persistent /dev/serial/{by-id,by-path} rules + make: install serial rules file + make: do not delete autotools generated file with distclean + udevadm: settle - allow --timeout=0 and --quiet + rules: move aoe rules to default rules file + volume_id: btrfs - update format + rules: add "do not edit header" + volume_id: support sub-uuid's and plug in btrfs device uuid + libudev: include <sys/types.h> + build: add -lsepol + build: just use autoreconf -i + rules: remove ide-scsi + rules: first simple step merging with Ubuntu rules + "'/sbin/modprobe abnormal' exit" - also print program options + rules: more changes toward Ubuntu rules merge + rules: more changes toward Ubuntu rules merge + rules: remove /dev/raw/raxctl symlink, it's a devfs leftover + rules: rtc - create rtc compat link only for cmos type rtc + rules: remove legacy symlinks + rules: do not put raw1394 in "video" group + rules: second round merging with Ubuntu rules + rules: remove /dev/dsp /dev/audio + rules: put alsa in group "audio" + rules: isdn - remove /dev/isdn/capi20 symlink + rules: provide /dev/raw/rawctl + if needed, store database entries also for devices which do not have a device node + build: use autoreconf --symlink + usb_id: add "image" class + require non-SYSFS_DEPRECATED 2.6.20+ kernel + build: default to --prefix=/usr --exec-prefix="" + libudev: enumerate - add lookup by property + rules: input - make sure needed variables are set + libudev: device - read "uevent" only if info is not already loaded + libudev: subsytem -> subsystem + libudev: bump revision + usb_id: use devtype lookup + require 2.6.22+ kernel + rules: Ubuntu merge - use group "cdrom" + rules: Ubuntu merge - use group "tape" + rules: replace DVB shell script rule + rules: Ubuntu merge - s/uucp/dialout/ + update NEWS + update NEWS + enable skipping of "naming-only" rules + usb_id: s/image/media/ + udevadm: s/udevinfo/udevadm info/ + rules: reorder block rules + rules: zaptel - add "dialout" group + libudev: device - add udev_device_get_property_value() + libudev: test - add udev_device_get_property_value() + +Marcel Holtmann (3): + libudev: device - add devtype support + libudev: device - lookup subsystem and devtype together + libudev: device - remove udev_device_get_parent_with_subsystem + +Michal Soltys (1): + man: udev - update NAME assignment + +Ryan Thomas (1): + rules: add rules for AoE devices + + +Summary of changes from v134 to v135 +============================================ + +Kay Sievers (6): + usb_id: add "break" to currently unused case labels + rules: fix cciss disk/by-id/ links + rules: add infiniband rules + rules: infiniband.rules -> 40-infiniband.rules + fix network interface name swapping + update configure and NEWS + +Marcel Holtmann (1): + usb_id: fix switch statement for video type + +Piter PUNK (2): + rules: /dev/null -> X0R + rules: add usb device nodes + + +Summary of changes from v133 to v134 +============================================ + +Gabor Z. Papp (1): + include errno.h in sysdeps.h + +Harald Hoyer (1): + rules: add persistent rules for memory stick block devices + +Kay Sievers (19): + autogen.sh: fix -print-multi-os-directory usage + volume_id: update btrfs magic + bump version + rules: merge group "video" into default rules + rules: v4l - add by-id/ links for USB devices + libudev: accept NULL whitelist in util_replace_chars() + usb_id: replace chars in returned strings + ata_id: make sure, we do not have slashes in values + scsi_id: make sure, we do not have slashes in values + volume_id: remove unused usage types + vol_id: if regular files are probed, use stat() for the size value + volume_id: update btrfs + volume_id: clear probing result before probing and do not probe a second time, if not needed + path_id: fix fibre channel handling + update NEWS TODO + floppy: use ARRAY_SIZE() + fix handling of swapping node name with symlink name + silence PHYSDEV* warning for WAIT_FOR* rules + rules: exclude "btibm" devices from vol_id calls + +Matthias Schwarzott (1): + rules: Gentoo update + +Peter Breitenlohner (2): + man: fix typos + floppy: fix array bounds check and minor calculation + + +Summary of changes from v132 to v133 +============================================ + +Alan Jenkins (2): + udevd: de-duplicate strings in rules + scsi_id: we don't use DEVPATH env var anymore, update man page + +Karel Zak (1): + volume_id: fat - move check for msdos signature (0x55 0xaa) + +Kay Sievers (22): + silence "comparison between signed and unsigned" + string index - split nodes and childs to allow and unlimited number of childs + reserve child slot 0 + merge trie nodes, childs and root into a single array + set errno = ENOSYS in inotify stub + udevadm: info - unify -V and --version + rules: remove DEVTYPE disk/partition + rules: remove pnp shell script, acpi loads these modules properly + update NEWS + configure: add linux-hotplug mail address + remove len == 0 check, the index root is always '\0' + volume_id: bump revision + volume_id: always check for all filesystem types and skip conflicting results + volume_id: fat - accept empty FAT32 fsinfo signature + fix spelling in comment + volume_id: ntfs - mark as no other fs must match + vol_id: clarify error message + libudev: device - handle disk "device" link for partitions in deprecated sysfs layout + limit $attr(<symlink>) magic to well-known links only + udevd: fix cleanup of /dev/.udev/uevent_seqnum + fix $links substitution for devices without any link + update NEWS + +Sergey Vlasov (1): + udevadm: fix option parsing breakage with klibc + + +Summary of changes from v131 to v132 +============================================ + +Kay Sievers (2): + fix size_t compiler warning on 32 bit platforms + convert debug string arrays to functions + + +Summary of changes from v130 to v131 +============================================ + +Alan Jenkins (17): + libudev: fix sysnum logic for digit-only device names + udevd: avoid overhead of calling rmdir on non-empty directories + use more appropriate alternatives to malloc() + libudev: util - optimize path_encode() + libudev: allocate udev_device->envp[] dynamically + replace strncpy() with strlcpy() + use re-entrant variants of getpwnam and getgrnam + udevd: fix memory leak + udevd: fix WAIT_FOR_SYSFS execution order + fix handling of string_escape option + udevd: use a tighter loop for compare_devpath() + udevd: avoid implicit memset in match_attr() + kerneldoc comment fixes + udevd: simplify rules execution loop + udevd: fix termination of rule execution + udevd: be more careful when matching against parents + udevd: shrink struct token to 12 bytes + +Kay Sievers (113): + remove outdated docs/README-gcov_for_udev + libudev: device - add device lookup by subsystem:sysname + libudev: also prefix non-exported functions with udev_* + libudev: add udev_monitor_send_device() + libudev: list - add flag + libudev: device - generate DEVNAME and DEVLINKS properties + vol_id: update README + libudev: handle ! in sysname, add sysnum, return allocated list_entry on add + delete simple-build-check.sh + test: move global ENV{ENV_KEY_TEST}="test" to local rule + libudev: monitor - fix send_device() property copying + libudev: device - add get_envp() to construct envp from property list + libudev: do not include ctrl in libudev.so + libudev: monitor - do not mangle DEVLINKS property + libudev: update DEVLINKS property when properties are read + libudev: device - lookup "subsystem" and "driver" only once + libudev: device - export properties when values are set + libudev: list - handle update of key with NULL value + libudev: ctrl - fix typo in set_env() + libudev: add global property list + libudev: device - copy global properties, unset empty properties + volume_id: btrfs - update magic to latest disk format + udevd: use libudev + move udev_device_db to libudev + rename udev source files + libudev: always add UDEV_LOG + libudev: monitor - export MAJOR/MINOR only if available + udev-node: name_list -> udev_list + udev-rules-parse: name_list -> udev_list + delete name_list, move common file functions + fix sorting of rules files + run_program: prevent empty last argv entry + update IMPORT= file/stdout property parsing + update rules file parsing + delete udev-util-file.c + libudev: list - prepend udev_* to all functions + libudev: add sysnum to test program + test: fix a few unintentially wrongly written rules which cause parse errors + libudev: monitor - add set_receive_buffer_size() + libudev: ctrl - change magic to integer + libudev: make list_node functions available + udevd: use udev_list_node + collect: use udev_list + delete list.h + merge udev-rules.c and udev-rules-parse.c + make struct udev_rules opaque + move run_program to util + udev_event_run() -> udev_event_execute_rules() + udev_rules_run() -> udev_event_execute_run(); + move udev_rules_apply_format() to udev-event.c + udev_list_cleanup() -> udev_list_cleanup_entries() + selinux_init(udev) -> udev_selinux_init(udev) + prefix udev-util.c functions with util_* + pass make distcheck + libudev: device - get_attr_value() -> get_sysattr_value() + cdrom_id: remove ARRAY_SIZE() declaration + replace missing get_attr_value() -> get_sysattr_value() + add "root" == 0 shortcuts to lookup_user/group() + do not use the new work-in-progress parser rule matcher + libudev: device - 128 -> ENVP_SIZE + add util_resolve_subsys_kernel() + handle numerical owner/group string in lookup_user/group() + replace in-memory rules array with match/action token list + do not create temporary node ($tempnode) if node already exists + shrink struct udev_event + shrink struct udev_event + rule_generator: fix netif NAME= value extraction regex + skip SYMLINK rules for devices without a device node + rules: let empty strings added to buffer always return offset 0 + fix uninitialized variable warnings + cache uid/gid during rule parsing + distinguish "match" from "assign" by (op < OP_MATCH_MAX) + determine at rule parse time if we need to call fnmatch() + special-case "?*" match to skip fnmatch() + libudev: monitor - replace far too expensive snprintf() with strlcpy() + libudev: monitor - cache result of monitor send buffer + fix "unused" warnings + remove debug printf + match KEY="A|B" without temporary string copy + match_attr() - copy attr value only when needed + do not init string arrays, just clear first byte + fix $attr{[<subsystem>/<sysname>]<attribute>} substitution + libudev: device - fill envp array while composing monitor buffer + test: add RUN+="socket: ..." to a test to run monitor code + libudev: device - allocate envp array only once + update NEWS + udevd: merge exec and run queue to minimize devpath string compares + ATTR{}== always fails if the attribute does not exist + rules: remove SCSI timeouts + rules: remove "add" match from usb device node rule + edd_id: add "change" event match + fstab_import: add "change" event match + write trace log to stderr + log rules file and line number when NAME, SYMLINK, OWNER, GROUP, MODE, RUN is applied + skip entire rule containing device naming keys, if no device can be named + fix udev_node_update_old_links() logic + move some info() to dbg() + add "devel" and "install" switches to autogen.sh + move debugging strings inside #ifdef DEBUG + firmware.sh: record missing files in /dev/.udev/firmware-missing/ + fix list handling in enumerate and rules file sorting + volume_id: btrfs update + info() PROGRAM and IMPORT execution + fix $links substitution + fix cleanup of possible left-over symlinks + do not import the "uevent" file when we only read the db to get old symlinks + usb_id: MassStorage SubClass 6 is "scsi" not "disk" + unify string replacement + $links should be relative + fix indentation + rules: md - add mdadm 3 device naming + cleanup /dev/.udev/queue on startup and exit + udevadm: settle - exit if udevd exits + +Matthias Koenig (1): + volume_id: swap - larger PAGE_SIZE support + +Steven Whitehouse (1): + volume_id: support for GFS2 UUIDs + + +Summary of changes from v129 to v130 +============================================ + +Kay Sievers (26): + fix compile error with --disable-logging + libudev: enumerate - add_device() -> add_syspath() + volume_id: hpfs - read label and uuid + use no_argument, required_argument, optional_argument in longopts + libudev: get rid of selinux + libudev: device - add get_parent_with_subsystem() + usb_id: use libudev + udevadm: info - fix --query=all for devices without a device node + vol_id: add size= option + move selinux noops to udev.h + volume_id: add dbg() as noop to check for compile errors + vol_id: fix logging glue + vol_id: always use the safe string versions for unencoded label and uuid + volume_id: better DDF raid detection + volume_id: add btrfs + volume_id: use PRIu64i, PRIx64 macros + udevd: clarify deprecated sysfs layout warning + libudev: fix --enable-debug + don not print error if GOTO jumps just to next rule + volume_id: add more vfat debugging information + libudev: libudev.pc remove selinux + store node name and symlinks into db symlink target if they are small enough + volume_id: more fat debugging + libudev: fix typo in "multiple entries in symlink" handling + connect /sys and /dev with /sys/dev/{block,char}/<maj>:<min> and /dev/{block,char}/<maj>:<min> + replace spaces in dm and md name symlinks + + +Summary of changes from v128 to v129 +============================================ + +Alan Jenkins (7): + udev-test.pl: set non-zero exitcode if tests fail + scsi_id: compiler warning on 32-bit + trivial cleanup in udev_rules_iter + avoid repeated scans for goto targets (udev_iter_find_label) + replace strerror() usage with threadsafe "%m" format string + fix messages (inc. debug compile failure) introduced when optimizing "goto" + allow compiler to check dbg() arguments on non-debug builds + +Kay Sievers (46): + libudev: switch to "udev_device_get_parent" + libudev: udev_device - add attribute cache + libudev: handle "device" link as parent, handle "class" "block" as "subsystem" + udevadm: info - fix lookup-by-name + libudev: switch API from devpath to syspath + libudev: rename ctrl_msg to ctrl_msg_wire + vol_id: fix lib logging glue + fix broken symlink resolving + fix udevadm trigger + libudev: pass udev_device in enumerate + libudev: fix "subsystem" value + always include config.h from Makefile + libudev: udev_device_get_devname -> udev_device_get_devnode + libudev: add udev_device_new_from_devnum() + libudev: also import "uevent" file when reading udev database + libudev: add userdata pointer + libudev: replace awkward callback list interfaces with list iterators + libudev: get devnum from uevent file + libudev: enumerate_get_devices_list -> enumerate_get_list + libudev: initialize selinux only when needed + libudev: device - read database only when needed + libudev: rework list handling + libudev: more list rework + lubudev: accept more sys directories as devices, and parent devices + libudev: enumerate - accept list of subsystems to scan, or skip + libudev: enumerate "subsystem" + libudev: enumerate - scan /sys/block/ if needed + libudev: enumerate - split new() and scan() + test: replace ancient sysfs tree with recent one + test: add missing pci directory because of .gitignore *.7 + gitignore: move *.8 to subdirs + test: replace last reference of "/class/*" devpath + fix dbg() callers + libudev: enumerate - scan devices and subsystems, add subsystem and attribute filter + udevadm: trigger: use libudev + fix segfault caused by wrong pointer used in dbg() + libudev: device_init() -> device_new() + udevadm: trigger fix long option --type= + libudev: add queue interface + udevadm: settle - use libudev queue + libudev: device - handle /sys/block/<disk-device-link>/<partition> + libudev: enumerate - ignore regular files while scanning + udevadm: trigger --type=failed - use libudev queue + rules: ieee1394 - create both, by-id/scsi-* and by-id/ieee-* links + build: include Makefile.am.inc in all Makefile.am + udevd: print warning if CONFIG_SYSFS_DEPRECATED is used + + +Summary of changes from v127 to v128 +============================================ + +Alan Jenkins (8): + fix uninitialized name_list error::ignore_error + do not needlessly declare some local variables in udev_rules_parse.c as static + remove deprecated envp[] in main() + fix name compare bug name_list_key_add() + remove redundant string copy in udev_rules_apply_format() + remove redundant "remove trailing newlines" in udevadm info + threadsafe rules iteration + fix off-by-one in pass_env_to_socket() + +Kay Sievers (53): + libudev: add monitor documentation + libudev: fix --disable-log + autogen.sh: add --with-selinux + volume_id: hfs - calculate proper uuid + fix dangling pointer returned by attr_get_by_subsys_id() + udev-test.pl: add --valgrind option + libudev: libudev.pc add Libs.private + volume_id: fail on undefined __BYTE_ORDER + remove FAQ + libudev: fix monitor documentation + libudev: add udev_device_get_syspath() + udev_device_init() remove statically allocated device support + udevadm: info - fix broken --device-id-of-file= + udevadm: control - use getopt_long() + udevadm: print warning to stderr if udevadm is called by symlink + udev-test.pl: remove left-over comment from --valgrind option + udevadm: rename source files + udevadm: rename internal functions to udevadm_* + udevadm: split out control functions + udevadm: move init from commands to udevadm + autogen.sh: add debug + use libudev code, unify logging, pass udev context around everywhere + volume_id: linux_raid - fix logic for volumes with size == 0 + vol_id: add --debug option + udevadm: add --version --help options to man page, hide them as commands + move udev_ctrl to libudev-private + udev-test.pl: set udev_log="err" + test-udev: cleanup libudev context and overridden rules file string + test-udev: remove unused var + add a bunch of private device properties to udev_device + udevadm: monitor - use libudev for udev monitor + libudev: monitor - add event properties to udev_device + udevadm: log message if udevadm link is used + udevd: remove max_childs_running logic + libudev: monitor- add netlink uevent support + udevadm: monitor - use libudev code to retrieve device data + libudev: udev_device - read "driver" value + libudev: rename enumerate function + libudev: add selinux + libudev: initialize selinux after logging + volume_id: merge util.h in libvolume_id-private.h + update file headers + libudev: udev_device - add more properties + libudev: do not use udev_db.c + libudev: get rid of udev_sysfs.c + libudev: get rid of udev_utils.c + libudev: rename libudev-utils.c libudev-util.c + libudev: do not use any udev source file + extras: use libudev code + convert to libudev and delete udev_utils_string.c + get rid of udev_sysdeps.c + use size definitions from libudev + udevadm: info - use "udev_device" + + +Summary of changes from v126 to v127 +============================================ + +Karel Zak (2): + build-sys: don't duplicate file names + build-sys: remove non-POSIX variable names + +Kay Sievers (26): + add inotify dummy definitions if inotify is not available + build: remove autopoint check + udevadm: trigger - add missing attr filter to synthesized "subsystem" register events + ignore duplicated rules file names + fix .gitignore + rules: delete all distro rules which do not use default rules + rules: add nvram + rules: add isdn rules + rules: Gentoo update + add missing includes + add some warnings + update .gitignore + add missing 'v' for "make changelog" + build: fix "make dist" + vol_id: make the --offset= argument optional + rules: optical drives - probe at last session offset, do not probe for raid + libudev: add library to access udev information + libudev: split source files + update INSTALL + libudev: add udev event monitor API + volume_id: remove deprecated functions and bump major version + volume_id: remove left-over fd close() + split udev_device.c to leave out rules handling from libudev + libudev: link against selinux if needed + firmware.sh: lookup lookup kernel provided firmware directory + libudev: require LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE + +Michal Soltys (1): + rules: fix md rules for partitioned devices + + +Summary of changes from v125 to v126 +============================================ + +Kay Sievers (9): + delete all Makefiles and move udev source to udev/ + use autotools + rules: mode 0660 for group "disk" + rules: update Fedora rules + update ChangeLog + INSTALL: --enable-selinux not --with-selinux + volume_id: move static lib to $prefix + volume_id: create relative links + rules: run vol_id on opticals only if media is found + +Marco d'Itri (1): + rules: Debian update + +Thomas Koeller (1): + use proper directory lib/lib64 for libvolume_id + + +Summary of changes from v124 to v125 +============================================ + +John Huttley (1): + rules: tape rules - add nst to usb and 1394 links + +Karl O. Pinc (1): + man: clarify $attr{} parent searching + +Kay Sievers (14): + collect: fix size_t printf + path_id: suppress trailing '-' like 'ID_PATH=pci-0000:05:01.0-' + rules: add v4l persistent links + docs: update some docs and delete outdated stuff + scsi_id: fix fallback to sg v3 for sg nodes + rules: fix cciss rules for partition numbers > 9 + udev.conf: udevcontrol -> udevadm control + rules: use consistently OPTIONS+= + scsi_id: the fallback fix broke error handling + man: rebuild from xml + do not touch node ownership and permissions, if already correct + rules: tape rules - add nst to by-path/ links + udevadm: info - add --export format to --device-id-of-file= + move default rules from /etc/udev/rules.d/ to /lib/udev/rules.d/ + +Marco d'Itri (7): + rules_generator: net rules - do not print error if file is missing and ignore commented rules + man: add link_priority default value + scsi_id: man page fix + udevadm: settle - add verbose output when running into timeout + rules: Debian update + rules: Debian update + ignore rule with GOTO to a non-existent label + +Thomas Koeller (1): + scsi_id: include sys/stat.h + +Tobias Klauser (1): + collect: check realloc return value + + +Summary of changes from v123 to v124 +============================================ + +Kay Sievers (1): + cdrom_id: fix recognition of blank media + + +Summary of changes from v122 to v123 +============================================ + +Erik van Konijnenburg (3): + add substitution in MODE= field + Makefile: use udevdir in "make install" + volume_id: support for oracleasm + +Harald Hoyer (1): + scsi_id: retry open() on -EBUSY + +Karel Zak (2): + volume_id: remove unnecessary global variable + volume_id: enable GFS probing code, add LABEL support + +Kay Sievers (5): + edd_id: call it only for sd* and hd* + rename WAIT_FOR_SYSFS to WAIT_FOR and accept an absolute path + rules: tape rules - use bsg device nodes for SG_IO + rules: persistent net - handle "locally administered" ibmveth MAC addresses + cdrom_id: export ID_CDROM_MEDIA_TRACK_COUNT_AUDIO=, ID_CDROM_MEDIA_TRACK_COUNT_DATA= + +Michal Soltys (1): + man: add NAME== match entry + +Xinwei Hu (2): + collect: realloc buffer, if needed + udevd: export .udev/queue/$seqnum before .udev/uevent_seqnum + + +Summary of changes from v121 to v122 +============================================ + +Hannes Reinecke (2): + scsi_id: remove all sysfs dependencies + scsi_id: add SGv4 support + +Karel Zak (1): + volume_id: clean up linux_raid code + +Kay Sievers (8): + scsi_id: update man page + scsi_id: remove bus_id option + scsi_id: add --sg-version= option + rules: adapt to new scsi_id + rules: adapt tape rules to new scsi_id + scsi_id: add bsg.h + volume_id: bump version + Makefile: do not create udevcontrol, udevtrigger symlinks + +MUNEDA Takahiro (2): + man: udevd- fix udev(8) reference + man: scsi_id + +Matthias Schwarzott (1): + cdrom_id: fix segfault + + +Summary of changes from v120 to v121 +============================================ + +Damjan Georgievski (1): + libvolume_id: recognize swap partitions with a tuxonice hibernate image + +Daniel Drake (1): + writing udev rules: fix rule typos + +David Woodhouse (1): + rules_generator: net rules - add "dev_id" value to generated rules + +Harald Hoyer (1): + selinux: more context settings + +Kay Sievers (21): + udevinfo: do not replace chars when printing ATTR== matches + vol_id: add --offset option + cdrom_id: replace with version which also exports media properties + udevd: at startup write message including version number to kernel log + rules_generator: net rules - always add KERNEL== match to generated rules + selinux: fix missing includes + allow setting of MODE="0000" + path_id: remove subsystem whitelist + logging: add trailing newline to all strings + scsi_id: initialize serial strings + persistent device naming: also read unpartitioned media + cdrom_id: add more help text + add $links substitution + fstab_import: add program to IMPORT matching fstab entry + add OPTIONS+="event_timeout=<seconds>" + write "event_timeout" to db + udevadm: trigger - add --env= option + udevadm: control - fix --env key to accept --env=<KEY>=<value> + udevadm: info - do not print ATTR{dev}== + persistent device naming: update tape rules + rules: update md rules + + +Summary of changes from v119 to v120 +============================================ + +Kay Sievers (9): + test: remove duplicated EXTRA entry + rules: remove last WAIT_FOR_SYSFS, load ppdev, switch scsi_device + udevadm: trigger - option to synthesize events and pass them to a socket + udevadm: info - resolve devpath if symlink is given + udevadm: remove old man page links and compat links for debugging tools + udevadm: trigger - fix broken socket option check + udevadm: trigger - fix --socket== + --verbose + also accept real socket files for RUN+="socket:<path>" + persistent device naming: cleanup storage rules + +Michael Kralka (1): + udevd: serialize events if they refer to the same major:minor number + + +Summary of changes from v118 to v119 +============================================ + +Anthony L. Awtrey (1): + do not skip RUN execution if device node removal fails + +Harald Hoyer (2): + rules: Fedora update + rules: do not set GROUP="disk" for scanners + +Jiri Slaby (1): + rules_generator: add missing write_net_rules unlock + +Karel Zak (2): + volume_id: fix UUID raw buffer usage + volume_id: fix typo in function documentation + +Kay Sievers (10): + switch mailing lists to linux-hotplug@vger.kernel.org + rules: remove tty rule which can never run because of an earlier "last_rule" + volume_id: update ext detection + selinux: set context for real file name not the temp name + hack to allow ATTR{block/*/uevent}="change" + rules_generator: add KERNEL=="<netifname>*" to generated rules + persistent device naming: also run on "change" event + test: add "subsystem" links to all devices + sysfs: depend on "subsystem" link + extend hack to allow TEST=="*/start" + +Matthias Schwarzott (1): + volume_id: respect LDFLAGS + +Neil Williams (1): + volume_id: add prefix=, exec_prefix= + +Roy Marples (1): + Makefile: do not require GNU install + + +Summary of changes from v117 to v118 +============================================ + +Daniel Drake (1): + doc: update "writing udev rules" + +Hannes Reinecke (1): + volume_id: LVM - add uuid + +Kay Sievers (9): + remove udevstart + rules_generator: do not create rules with insufficient matches + man: udevadm settle - mention 180 seconds default timeout + libvolume_id: squashfs - add endianess support for LZMA compression + rules: add AOE rule + volume_id: md - add metadata minor version + volume_id: run only once into a timeout for unreadable devices + create_floppy_devices: fix logic for more than one floppy device + volume_id: also add readable check to probe_all() + +Matthias Schwarzott (1): + rules: Gentoo update + +Michael Prokop (1): + libvolume_id: squashfs+LZMA compression detection + + +Summary of changes from v116 to v117 +============================================ + +Dan Nicholson (2): + extras: ignore built and generated files + volume_id: create relative symlink when $(libdir) = $(usrlibdir) + +Kay Sievers (15): + usb_id: fail if vendor/product can not be retrieved + rules: SUSE update + firmware: do not print error if logger is missing + volume_id: vfat - allow all possible sector sizes + volume_id: LUKS - export version + volume_id: ntfs - rely on valid master file table + volume_id: bump version + udevinfo: exclude "uevent" file from --attribute-walk + udevadm: merge all udev tools into a single binary + udevadm: accept command as option, like --help, --version + udevadm: add info option --device-id-of-file=<file> + Makefile: fix bogus version number than got committed + udevadm: also return major==0 results for --device-id-of-file + man: udevd.8 - remove udevcontrol section + udevadm: control - allow command to be passed as option + +MUNEDA Takahiro (1): + man: fix udevadm.8 typo + +Matthias Schwarzott (2): + firmware: remove hardcoded path to logger + rules: Gentoo update + +VMiklos (1): + rules: Frugalware update + + +Summary of changes from v115 to v116 +============================================ + +Bryan Kadzban (1): + rules: fix typos + +Harald Hoyer (3): + check line length after comment check and whitespace strip + only install *.rules + remove extra space from udevinfo symlink output + +Kay Sievers (29): + rules: fix two trivial typos + rules: random and urandom are 0666 + rules: add REMOVE_CMD rule + track "move" events to rename database and failed files + rules: Gentoo update + rules: add i2o driver rule + man: recreate man pages + volume_id: fix linux_raid metadata version 1.0 detection + add $name substitution + do not delete the device node with ignore_remove, but handle the event + print warning for invalid TEST operations + rules: do not delete /lib/udev/devices/ nodes on "remove" + rules: remove broken nvram group assignment without any permission + add /dev/rtc symlink if new rtc drivers are used + increase WAIT_FOR_SYSFS timeout to 10 seconds + rules: put bsd nodes in /dev/bsd/ directory + path_id: fix for stacked class devices + ignore device node names while restoring symlinks from the stack + use SEQNUM in /dev/.udev/queue/ instead of devpath + rules: add memstick module loading + udevinfo: simplify symlink printing logic + prevent wrong symlink creation if database disagress with current rules + fix wrong variable used in logged string + update README + rule_generator: move all policy from write_net_rules to the rules file + rules: call usb_id only for SUBSYSTEMS=="usb" + rules: split out and fix persistent tape rules + fix debug output string + rule_generator: always match netif type in generated rule + +Matthias Schwarzott (3): + rules: Gentoo update + rules: Gentoo update + rules: Gentoo update + +Michael Morony (1): + set buffer size if strlcpy/strlcat indicate truncation + +maximilian attems (1): + correct includes in udev_selinux.c + + +Summary of changes from v114 to v115 +============================================ + +Harald Hoyer (1): + rules: fix typo in 80-drivers.rules + +Kay Sievers (15): + rules: add default rules + rules: update SUSE rules + rules: add packages rules + rules: add ia64 rules + rules: move md-raid rules to packages dir + rules: run vol_id only for partitions + rules: update Fedora rules + edd_id: move persistent rules to its own file + accept relative path for TEST + rules: add iowarrior rule + volume_id: fix sqashfs detection + do not ignore dynamic rule if it is the last one in the list + rule_generator: fix wrong DRIVERS!= logic + rules: update Fedora + Makefile: install default rules + +Marco d'Itri (3): + rules_generator: remove policy from write_cd_rules + rules_generator: fix write_cd_rules when similar names exist in the root directory + rules: Debian update + + +Summary of changes from v113 to v114 +============================================ + +Hannes Reinecke (3): + collect: extra to synchronize actions across events + add $driver subtitution + rules_generator: add S/390 persistent network support + +Kay Sievers (24): + rules_generator: remove executable flag from include file + always unlink temporary file before creating new one + rules: SUSE update + volume_id: ext4 detection + udevtrigger: allow to specify action string + add option to RUN key to ignore the return value of the program + use global udev_log variable instead of parameter in run_program + add udev_rules_run() to handle RUN list + move udev_utils_run.c into udev_rules.c + rules: SUSE update + name_list: rename loop_name -> name_loop + handle dynamic rules created in /dev/.udev/rules.d/ + allow SYMLINK== match + libvolume_id: use /usr/$libdir in pc file + Makefile: add --as-needed flag to ld + restore behavior of NAME== + rules_generator: remove "installation" function + udevtrigger: trigger "driver" events + rules: update SUSE + rules: Fedora update + rules: add "do not edit" comment + rules: Fedora update + rules_generator: skip random MAC addresses + write changed network interface names to the kernel log + +Matthias Schwarzott (3): + rules: Gentoo update + fix inotify to work not only once + rules: Gentoo update + +Richard Hughes (1): + Makefile: add "make dist" for nightly snapshots + + +Summary of changes from v112 to v113 +============================================ + +David Zeuthen (1): + vol_id: do not fail if unable to drop privileges + +Kay Sievers (12): + add missing ChangeLog + make ATTR{[$SUBSYSTEM/$KERNEL]<attr>}="<value>" working + rules: recognize partitions and disk devices properly + rules: SUSE update + atomically replace existing nodes and symlinks + do not try to create existing file + info() for ignore_remove + rules: SUSE update + Makefile: check for missing ChangeLog or RELEASE-NOTES at release + allow to disable the replacement of unusual characters + no newline in log messages + udevd: do not use syslog if --verbose (debugging) is used + +Tobias Klauser (1): + fix typo in udev_utils_run.c + + +Summary of changes from v111 to v112 +============================================ + +Fabio Massimo Di Nitto (1): + rules: ignore partitons that span the entire disk + +Hannes Reinecke (1): + cciss device support + +Kay Sievers (34): + udevd: close /proc/meminfo after reading + create_floppy_devices: remove dead "unlink" code + volume_id: add function documentation + udev_db: escape path names with \x00 instead of %00 + udevsettle: use long options + replace_chars: replace spaces in node name + volume_id: add and export string encoding function + vol_id: export encoded strings + rules: use encoded strings instead of skipping characters + udevtest: print message before log output + volume_id: escape % character + replace_chars: replace % character + IMPORT: do not mangle whitespace + scsi_id: do not install symlink in /sbin + rules: SUSE update + volume_id: terminate overlong label strings + scsi_id: add long options + rules: use long options for scsi_id + path_id: skip subsystem directory + rules: fix cciss rule + rules: SUSE update + scsi_id: fix typo in help text + fix "do not access parent" warning for ATTR{} + sysfs: add device lookup by $SUBSYSYTEM:$KERNEL + events for "bus" and "class" registration must be matched as "subsystem" + udevtest: add --subsystem option + sysfs: change order of subsystem lookup + add $sys substitution + add TEST=="<file>" key + add "[$SUBSYSTEM/$KERNEL]<attribute>" lookup + sysfs: handle bus/class top-level directories + sysfs: skip unknown sysfs directories + rules: SUSE update + release 112 + +Miklos Vajna (2): + create_floppy_devices: add man page + path_id: remove on make uninstall + +Ryan Lortie (1): + volume_id: support for long-filename based labels + +Scott James Remnant (2): + replace_untrusted_chars: replace all whitespace with space + run_program: log "info" not "error" if program is missing + + +Summary of changes from v110 to v111 +============================================ + +Kay Sievers (19): + rules: SUSE update + rules: Fedora update + volume_id: use md native uuid format + vol_id: use long options + volume_id: add volume_id_get_* functions + vol_id: use volume_id_get_* + udevd: use fgets() to read /proc files + volume_id: add internal UUID_STRING + volume_id: add DDF support + vol_id: README update + volume_id: rename UUID_64BIT_LE/BE + vol_id: add ID_FS_UUID_SAFE + rules: use ID_FS_UUID_SAFE + rules: SUSE update + volume_id: give access to list of all available probers + vol_id: use libvolume_id prober list for --probe-all + volume_id: add remaining names for prober lookup by type + rules: SUSE update + volume_id: vol_id depends on libvolume_id + +Matthias Schwarzott (2): + volume_id: fix Makefile for parallel make + rules: Gentoo update + + +Summary of changes from v109 to v110 +============================================ + +Harald Hoyer (1): + udevcontrol: allow to set global variables in udevd + +Kay Sievers (13): + remove eventrecorder.sh + update SUSE rules + volume_id: add md metadata 1.0, 1.1, 1.2 support + unset variable with ENV{VAR}="" + delete copies of default rules in SUSE rules + volume_id: ext - fix endianess in version number + rules: Fedora update + volume_id: old md metadata has only 32 bit for the uuid + volume_id: minix version 3 support + don't create $tempnode for devices without major + usb_id: add <devpath> to help text + ata_id: use getopt_long() + rules: SUSE update + +Matthias Schwarzott (3): + Makefile: respect CFLAGS/LDFLAGS + rules: Gentoo update + ata_id: don't log error for libata devices on older kernels + + +Summary of changes from v108 to v109 +============================================ + +Harald Hoyer (1): + create_floppy_devices: create nodes with correct selinux context + +Kay Sievers (11): + udevtest: export ACTION string if given as option + update SUSE rules + make ACTION!="add|change" working + udevtest: import uevent variables if possible + udevinfo: export all information stored in database + default rules: add libata compat links + create_path: don't fail if something else created the directory + udevd: fix serialization of events + path_id: remove broken example + libvolume_id: do not install static library + update SUSE rules + +Matthias Schwarzott (2): + update Gentoo rules + persistent device naming: add joystick links + +VMiklos (1): + path_id: add man page + + +Summary of changes from v107 to v108 +============================================ + +Kay Sievers (3): + udevinfo: relax check for the correct device if looked up by name + don't write to sysfs files during test run + finally remove the directory event-multiplexer crap + +Matthias Schwarzott (2): + write_cd_rules: set default link type to "by-id" for usb and ieee1394 devices + update Gentoo rules + +Pozsar Balazs (1): + udevsettle: read udev not kernel seqnum first + + +Summary of changes from v106 to v107 +============================================ + +Jean Tourrilhes (1): + udevtest: export UDEV_LOG if we changed it + +Kay Sievers (33): + man: add missing options to various man pages + man: fix typo + create_floppy_devices: apply specified mode without umask + man: spelling fixes + udevmonitor: add switch for kernel and udev events + default rules: wait for 0:0:0:0 scsi devices only + update Fedora rules + delete dasd_id, it moved to s390-tools + update Gentoo rules + encode db-file names, instead of just replacing '/' + update internal variables if we see $DEVPATH during IMPORT + increase /proc/stat buffer + maintain index over device-names to devpath relation + restore overwritten symlinks when the device goes away + store devpath with the usual leading slash + add link_priority to rule options, and store it in database + pick actual valid device in udev_db_lookup_name + cleanup already existing db-entries and db-index on device update + selinux: move selinux_exit() to the main programs + remove old error message + read list of devices from index, make index private to database + priority based symlink handling + volume_id: get rid of compiler warning + udevinfo: remove -d option + update %n on netif name change + if a node goes away, possibly restore a waiting symlink + update TODO + man: add "link_priority" option + update SUSE rules + udevtest: add --force mode + udevinfo: print link priority + usb_id: append target:lun to storage device serial + run_directory: add final warning before removal + +Marco d'Itri (1): + update Debian rules + +Matthias Schwarzott (2): + udevd: cleanup std{in,our,err} on startup + udevmonitor: fix swapped event switch descriptions + + +Summary of changes from v105 to v106 +============================================ + +A. Costa (1): + man: fix typos in scsi_id and udevd + +Andrey Borzenkov (2): + vol_id: add -L to print raw partition label + vol_id: document -L + +Jamie Wellnitz (1): + persistent device naming: tape devices and medium changers + +Kay Sievers (15): + exclude parent devices from DRIVER== match + volume_id: really fix endianess bug in linux_raid detection + release 105 + man: correct udevinfo --export-db + path_id: append LUN to iSCSI path + create_floppy_devices: add option for owner/group + update example rules + apply format chars to ATTR before writing to sysfs + add (subsystem) to udevmonitor output + update DRIVER== changes + remove --version from the udevinfo man page + add test for an attribute which contains an operator char + man: add note about parent matching behavior + scsi_id: accept tabs in /etc/scsi_id.conf + remove dead rule in persistent tape rules + +Matthias Schwarzott (4): + correct typo in extras/scsi_id/scsi_id.conf + fix retry-loop in netif-rename code + add option --version to udevd + rule_generator: fix for creating rules on read-only filesystem + +Peter Breitenlohner (1): + fix INSTALL_PROGRAM vs. INSTALL_SCRIPT + +Sergey Vlasov (3): + udevd: init signal pipe before daemonizing + unlink old database file before creating a new one + fix %c $string substitution + +Theodoros V. Kalamatianos (1): + fix udev attribute names with a colon + + +Summary of changes from v104 to v105 +============================================ + +A. Costa (1): + man: fix typos in scsi_id and udevd + +Andrey Borzenkov (2): + vol_id: add -L to print raw partition label + vol_id: document -L + +Kay Sievers (2): + exclude parent devices from DRIVER== match + volume_id: really fix endianess bug in linux_raid detection + +Matthias Schwarzott (2): + correct typo in extras/scsi_id/scsi_id.conf + fix retry-loop in netif-rename code + +Peter Breitenlohner (1): + fix INSTALL_PROGRAM vs. INSTALL_SCRIPT + +Sergey Vlasov (3): + udevd: init signal pipe before daemonizing + unlink old database file before creating a new one + fix %c $string substitution + + +Summary of changes from v103 to v104 +============================================ + +Kay Sievers (12): + update Fedora rules + update example rules + update SUSE rules + update SUSE rules + volume_id: fix endianess bug in linux_raid detection + man: fix udevmonitor text + man: recreate from xml + rename config "filename" to "dir" + remove outdated documentation + rename "udev.c" to "test-udev.c" - it is only for testing + update Fedora rules + use git-archive instead of git-tar-tree + +Kazuhiro Inaoka (1): + inotify syscall definitions for M32R + +Marco d'Itri (2): + write_cd_rules: identity-based persistence + scsi_id: remove trailing garbage from ID_SERIAL_SHORT + +Russell Coker (1): + SELinux: label created symlink instead of node + + +Summary of changes from v102 to v103 +============================================ + +Kay Sievers: + persistent storage rules: skip gnbd devices + volume_id: add checksum check to via_raid + volume_id: add comment about hfs uuid conversion + update SUSE rules + update Fedora rules + + +Summary of changes from v101 to v102 +============================================ + +Daniel Drake: + writing_udev_rules: fix typo in example rule + +Kay Sievers: + create missing ChangeLog for version 101 + update SUSE rules + update default rules + first try "subsystem" link at a parent device, before guessing + if /sys/subsystem exists, skip class, bus, block scanning + scsi_id: export ID_SERIAL_SHORT without vendor/product + update SUSE rules + +MUNEDA Takahiro: + path_id: fix SAS disk handling + + +Summary of changes from v100 to v101 +============================================ + +Arjan Opmeer: + fix udevinfo help text typo + +Bryan Kadzban: + cleanup default rules + add IMPORT operations to the udev man page + +Kay Sievers: + remove Makefile magic for leading '0' in version + udevd: use getopt_long() + udevd: add --verbose option to log also to stdout + udevd: add --debug-trace option + rule_generator: improve net rule comment generation + volume_id: correct iso9660 high sierra header + warn if a PHYSEDV* key, the "device" link, or a parent attribute is used + don't print PHYSDEV* warnings for old WAIT_FOR_SYSFS rules + udevinfo: print error in --attribute-walk + udev_sysfs: unify symlink resolving + udevtrigger: trigger devices sorted by their dependency + fix spelling in deprecation warning + release 101 + +Michał Bartoszkiewicz: + udevtrigger: fix typo that prevents partition events + +Miles Lane: + clarify "specified user/group unknown" error + +Piter PUNK: + update slackware rules + +VMiklos: + update Frugalware rules + + +Summary of changes from v099 to v100 +============================================ + +Kay Sievers: + update SUSE rules + fix messed up ChangeLog from release 099 + man: add $attr{} section about symlinks + revert persistent-storage ata-serial '_' '-' replacement + + +Summary of changes from v098 to v099 +============================================ + +Greg KH: + update Gentoo rules + +Kay Sievers: + udev_db.c: include <sys/stat.h> + use fnmatch() instead of our own pattern match code + rename major/minor variable to maj/min to avoid warning + update source file headers + udevtest: print header that ENV{} can't work + update TODO + udevtrigger: options to filter by subsystem and sysfs attribute + udevtrigger: remove unused longindex + udevinfo: use long options + udevd: use files instead of symlinks for /dev/.udev/queue,failed + udevtrigger: fix pattern match + reorder options in udevinfo man page + udevinfo: fix SUBSYTEMS spelling error + fix ENV{TEST}="Test: $env{TEST}" + let $attr{symlink} return the last element of the path + cdrom_id: add rules file to call cdrom_id + udevinfo: do not show symlinks as attributes in --attribute-walk + remove broken name_cdrom.pl + +Marco d'Itri: + update Debian rules + run_program: close pipe fd's which are connected to child process + add persistent rules generator for net devices and optical drives + +MUNEDA Takahiro: + changes rules for ata disk from '_' to '-' + +Sergey Vlasov: + make struct option arrays static const + fix "subsytem" typo + + +Summary of changes from v097 to v098 +============================================ + +Alex Merry: + udevtest: allow /sys in the devpath paramter + +Harald Hoyer: + selinux: init once in the daemon, not in every event process + +Kay Sievers: + udevd: remove huge socket buffer on the control socket + man page: fix typo + rename udev_libc_wrapper -> udev_sysdeps + db: store devpath - node relationship for all devices + udevinfo: allow -a -n <node> + udevinfo, udevtest: simplify '/sys' stripping from devpath argument + lookup_user, lookup_group: report "unknown user" and "lookup failed" + consistent key naming to match only the event device or include all parent devices + skip rule, if too may keys of the same type are used + introduce ATTR{file}="value" to set sysfs attributes + update SUSE rules + update default rules + export DRIVER for older kernels as a replacement for PHYSDEVDRIVER + fix typo in SUBSYSTEMS key parsing + udevtrigger: add --retry-failed + volume_id: add suspend partition detection + vol_id: use primary group of 'nobody' instead of 'nogroup' + remove built-in /etc/passwd /etc/group parser + always expect KEY{value} on ATTR, ATTRS, ENV keys + use new key names in test programs + cleanup commandline argument handling + db: don't create a db file for only a node name to store + man: add ATTR{file}="value" assignment + +Lennart Poettering: + volume_id: fix fat32 cluster chain traversal + +Marco d'Itri: + fix 'unknow user' error from getpwnam/getgrnam + fix rc when using udev --daemon + update Debian rules + +Michał Bartoszkiewicz: + man pages: fix typos + + +Summary of changes from v096 to v097 +============================================ + +Anssi Hannula: + add joystick support to persistent input rules + +Kay Sievers: + firmware.sh: remove needless '/' + vol_id: add --skip-raid and --probe-all option + switch uevent netlink socket to group 1 only + increase /proc/stat read buffer + use "change" instead of "online" events + remove 'static' from local variable + libvolume_id: add parameter 'size' to all probe functions + man pages: replace 'device-path' by 'devpath' + man pages: work around xmlto which tries to be smart + refresh vol_id man page + udevinfo: add DRIVER== + Makefile: fix dependency + libvolume_id: read ufs2 label + switch ifdef __KLIBC__ to ifndef __GLIBC__ + report failing getpwnam/getgrnam as error + rename udevcontrol message types and variables + initialize unused sockets to -1 + udevd: remove useless udevinitsend parameter + update README + udevd: autotune max_childs/max_childs_running + update frugalware rules + update SUSE rules + move default rules to etc/udev/rules.d/ + add 'crypto' devices to persistent storage rules + add late.rules to default rules + update Fedora rules + don't report an error on overlong comment lines + update SUSE rules + udevd: read DRIVER from the environment + +Marco d'Itri: + make rename_netif() error messages useful + path_id: fix an harmless syntax error + +Piter PUNK: + update slackware rules + +Richard Purdie: + Fix inotify syscalls on ARM + + +Summary of changes from v095 to v096 +============================================ + +Kay Sievers: + Makefiles: fix .PHONY for man page target + allow longer devpath values + path_id: prepare for new sysfs layout + + +Summary of changes from v094 to v095 +============================================ + +Kay Sievers: + update SUSE rules + don't remove symlinks if they are already there + allow "online" events to create/update symlinks + udevinfo: clarify parent device attribute use + update SUSE rules + netif rename: optimistic loop for the name to become free + remove broken %e enumeration + +Tobias Klauser: + print usage of udevcontrol when no or invalid command is given + + +Summary of changes from v093 to v094 +============================================ + +Daniel Drake: + update "writing udev rules" + +Kay Sievers: + libvolume_id: gfs + gfs2 support + remove MODALIAS key and substitution + add persistent-input.rules + +Marco d'Itri: + update Debian rules + + +Summary of changes from v092 to v093 +============================================ + +Hannes Reinecke: + path_id: add support for iSCSI devices + +Kay Sievers: + libvolume_id: fat - check for signature at end of sector + libvolume_id: add more software raid signatures + update Fedora rules + path_id: prevent endless loop for SAS devices on older kernels + remove udevsend + replace binary firmware helper with shell script + skip device mapper devices for persistent links + + +Summary of changes from v091 to v092 +============================================ + +Kay Sievers: + don't include stropts.h, some libc's don't like it + udevd: create leading directories for /dev/.udev/uevent_seqnum + vol_id: fix logging from libvolume_id's log function + update SUSE rules + update SUSE rules + add more warnings for invalid key operations + fix offsetof() build issue with recent glibc + selinux: fix typo in block device node selection + vol_id: add NetWare volume detection + edd_id: fix "(null)" output if "mbr_signature" does not exist + update Fedora rules + libvolume_id: nss - use different uuid + +Libor Klepac: + path_id: add platform and serio support + +Marco d'Itri: + update Debian rules + path_id: fix bashism + + +Summary of changes from v090 to v091 +============================================ + +Hannes Reinecke: + path_id: fix SAS device path generation + +Kay Sievers: + udevtest: don't try to delete symlinks + persistent rules: fix typo in dm rule + allow NAME=="value" to check for already assigned value + udevd: export initial sequence number on startup + + +Summary of changes from v089 to v090 +============================================ + +Kay Sievers: + udevd: export current seqnum and add udevsettle + volume_id: fix endianess conversion typo for FAT32 + merge device event handling and make database content available on "remove" + set default udevsettle timeout to 3 minutes + export INTERFACE_OLD if we renamed a netif + let udevmonitor show the possibly renamed devpath + volume_id: move some debug to info level + udevtrigger: fix event order + usb_id: remove uneeded code + remove old symlinks before creating current ones + path_id: fix loop for SAS devices + apply format char to variables exported by ENV + +Marco d'Itri: + add inotify support for hppa and MIPS and log if inotify is not available + +Matt Kraai: + fix typo in error message + + +Summary of changes from v088 to v089 +============================================ + +Hannes Reinecke: + path_id: add bus to USB path + +Kay Sievers: + change rule to skip removable IDE devices + don't create uuid/label links for raid members + volume_id: provide library + fix rule order for persistent tape links + update man page + volume_id: provide a custom debug function + volume_id: rename subdirectory + volume_id: use shared library by default + because is better than cause + volume_id: remove some global symbols + volume_id: define exported symbols + remove all stripping code + man pages: mention udev(7) not udev(8) + update Debian rules + move all *_id programs to /lib/udev/ + update Red Hat rules + update SUSE rules + pass CROSS_COMPILE to AR and RANLIB down to extras/ + volume_id: update README + volume_id: generate man page from xml source + update README + fix symlink targets in Makefiles + + +Summary of changes from v087 to v088 +============================================ + +Hannes Reinecke: + persistent links: add scsi tape links and usb path support + +Kay Sievers: + volume_id: add squashfs detection + reset signal handler in event process + correct use of fcntl() + add udevtrigger to request events for coldplug + add ',' to trusted chars + volume_id: remove partition table parsing code + volume_id: remove all partition table support + fix spelling error in debug string + rename "persistent disk" to "persistent storage" + fix output for USB path + + +Summary of changes from v086 to v087 +============================================ + +Hannes Reinecke: + path_id: support SAS devices + +Kay Sievers: + fix persistent disk rules to exclude removable IDE drives + warn about %e, MODALIAS, $modalias + remove devfs rules and scripts + +Masatake YAMATO: + typo in debug text in udev_run_hotplugd.c + + +Summary of changes from v085 to v086 +============================================ + +Kay Sievers: + volume_id: replace __packed__ by PACKED macro + volume_id: split raid and filesystem detection + volume_id: add missing return + udevd: fix queue export for multiple events for the same device + +Kyle McMartin: + workaround missing kernel headers for some architectures + +Nix: + update to udev-084/doc/writing_udev_rules + + +Summary of changes from v084 to v085 +============================================ + +Andrey Borzenkov: + Fix trivial spelling errors in RELEASE-NOTES + +Jeroen Roovers: + fix typo in parisc support to path_id + +Kay Sievers: + make WAIT_FOR_SYSFS usable in non "wait-only" rules + fix typo in man page + include sys/socket.h for klibc build + cramfs detection for bigendian + exit WAIT_FOR_SYSFS if the whole device goes away + update SUSE rules + update Red Hat rules + update Gentoo rules + include errno.h in udev_libc_wrapper.c + + +Summary of changes from v083 to v084 +============================================ + +Kay Sievers: + update SUSE rules + switch CROSS to CROSS_COMPILE + replace fancy silent build program by simple kernel build like logic + move manpages to top level + remove UDEVD_UEVENT_INITSEND + whitespace fixes + scsi_id: remove dead files + optimize sysfs device and attribute cache + let SYSFS{} look at the device, not only the parent device + add debug output to sysfs operations + + +Summary of changes from v082 to v083 +============================================ + +Andrey Borzenkov: + man page: document when substitutions are applied for RUN and other keys + check for ignore_device in loop looks redundant + +Kay Sievers: + udevstart: fix NAME="" which prevents RUN from being executed + find programs in /lib/udev for IMPORT if {program} is not given + don't add $SUBSYSTEM automatically as $1 to programs + remove redundant substitution of RUN key + + +Summary of changes from v081 to v082 +============================================ + +Andrey Borzenkov: + substitute format chars in RUN after rule matching + +Kay Sievers: + scsi_id, usb_id: request device parent by subsystem + path_id: work with "all devices in /sys/devices" + ignore all messages with missing devpath or action + Makefile: remove dynamic config file generation + path_id: handle fiber channel (Hannes Reinecke <hare@suse.de>) + usb_id: don't fail on other subsytems than "scsi" + don't do RUN if "ignore_device" is given + increase kernel uevent buffer size + move udev(8) manpage to udev(7) + recreate man pages from xml source + remove udev, udevstart, udevsend from the default installation + update SUSE rules + rename apply_format() cause it is public now + udevtest: add udev_rules_apply_format() to RUN keys + let "ignore_device" always return the event successfully + +Olivier Blin: + fixes udev build with -fpie + + +Summary of changes from v080 to v081 +============================================ + +Kay Sievers: + add DEVLINKS to "remove" event + better log text and comments + vol_id: probe volume as user nobody + fix BUS, ID, $id usage + prepare moving of /sys/class devices to /sys/devices + + +Summary of changes from v079 to v080 +============================================ + +Brent Cook: + fix dependency for make -j2 + +coly: + fix man page typos + +Kay Sievers: + update RELEASE-NOTES + TODO + fix typo in man page + update TODO + update SUSE rules + path_id: fix invalid character class + replace libsysfs + +Marco d'Itri: + udev_selinux.c: include udev.h + + +Summary of changes from v078 to v079 +============================================ + +Kay Sievers: + don't log error if database does not exist + use udev_root instead of "/dev"in selinux matchpathcon_init_prefix() + scsi_id: read page 0x80 with libata drives + update SUSE rules + remove %e from man page + + +Summary of changes from v077 to v078 +============================================ + +Greg Kroah-Hartman: + Update Gentoo udev main rule file. + add parisc support to path_id + +Hannes Reinecke: + scsi_id: -u fold multiple consecutive whitespace chars into single '_' + +Harald Hoyer: + optimize SELinux path match + +Kay Sievers: + update README + allow C99 statements + fix segfaulting create_floppy_devices + update SUSE rules + remove unused variables + remove default settings in udev.conf + clearenv() is now part of klibc + add DEVLINKS to the event environment + +Kurt Garloff: + scsi_id: support pre-SPC3 page 83 format + + +Summary of changes from v076 to v077 +============================================ + +Kay Sievers: + merge two consecutive static strlcat's + don't return an error, if "ignore_device" is used + remove outdated and misleading stuff + move SEQNUM event skipping to udevsend + update RELEASE-NOTES + update SUSE rules + allow programs in /lib/udev called without the path + update SUSE rules + add target to to generate ChangeLog section + update Red Hat rules + +Marco d'Itri: + allow to overwrite the configured udev_root by exporting UDEV_ROOT + let udevsend ignore events with SEQNUM set + update Debian rules + + +Summary of changes from v75 to v076 +============================================ + +Kay Sievers: + fix typo in eventrecorder + volume_id: include stddef.h header + remove misleading install instructions + remove all built-in wait_for_sysfs logic + add linux/types.h back, old glibc-kernel-headers want it + volume_id: use glibc's byteswap + udevd: ignore all messages without DEVPATH + udevd: track exit status of event process + udevd: export event queue and event state + remove "udev_db" option from config file + Makefile: remove exec_prefix and srcdir + update README and RELEASE-NOTES + udevd: track killed event processes as failed + update README + don't start udevd from udevsend + udevd: add a missing return + libvolume_id: fix weird fat volume recognition + move some helpers from extras to /lib/udev + +Scott James Remnant: + move delete_path() to utils + clean-up empty queue directories + Makefile: fail, if submake fails + + +Summary of changes from v74 to v075 +============================================ + +Greg Kroah-Hartman: + Make run_directory.c stat the place it is going to try to run. + +Kay Sievers: + forgot the ChangeLog for 074 + volume_id: provide libvolume_id.a file + remove our own copy of klibc + remove outdated HOWTO + update TODO + update SUSE rules + remove completely useless start script + fix tests and remove no longer useful stuff + replace udeveventrecorder by a shell script + + +Summary of changes from v73 to v074 +============================================ + +Kay Sievers: + never queue events with TIMEOUT set + let NAME="" supress node creation, but do RUN keys + remove udevinitsend + update .gitignore + +Marco d'Itri: + add strerror() to error logs + move some logging from dbg() to info() + + +Summary of changes from v72 to v073 +============================================ + +Kay Sievers: + udevd: depend on netlink and remove all sequence reorder logic + print useconds in udevmonitor + add RELEASE-NOTES, update TODO + + +Summary of changes from v71 to v072 +============================================ + +Ananth N Mavinakayanahalli: + libsysfs: translate devpath of the symlinked class devices to its real path + +Jan Luebbe: + add man pages for *_id programs + +Kay Sievers: + volume_id: add OCFS Version 1 + volume_id: add Veritas fs + volume_id: check ext fs for valid blocksize, cause magic is only 2 bytes + volume_id: move blocksize validation to fix jbd recognition + volume_id: fix typo in ocfs + volume_id: add vxfs include + volume_id: make FAT32 recognition more robust + volume_id: Version 051 + volume_id: fix typo in ext blocksize check + volume_id: Version 052 + FAQ: remove confusing statement about module loading + cleanup compiler/linker flags + use DESTDIR on uninstall, no need to pass prefix to submake + allow to pass STRIPCMD, to skip stripping of binaries + cleanup make release + fix the new warnings I asked for + move rules parsing into daemon + "make STRIPCMD=" will disable the stripping of binaries + remove no longer working udevd-test program + "STRIPCMD=" for the EXTRAS + add dummy inotify syscalls on unsupported architecture + remove no longer needed waiting for "dev" file + revert the "read symlink as device patch" + use libsysfs to translate the class linke to the device path + libsysfs: remove brute-force "bus", "driver" searching for old kernels + test: add "driver" and "bus" links to test sysfs tree + update RELEASE-NOTES + udevd: don't daemonize before initialization + log to console if syslog is not available + udevd: disable OOM + remove precompiled rules option + export DEVNAME on "remove" only if we really got a node to remove + fix typo in umask() + + +Summary of changes from v70 to v071 +============================================ + +Greg Kroah-Hartman: + Remove the udev.spec file as no one uses it anymore + +John Hull: + edd_id: check that EDD id is unique + +Kay Sievers: + ata_id: open volume O_NONBLOCK + add "Persistent Device Naming" rules file for disks + scsi_id: switch temporary node creation to /dev + volume_id: set reiser instead of reiserfs for filesystem type + update devfs rules header + update Debian rules + update Fedora rules + update Debian rules + remove no longer needed includes + switch tools and volume_id from LGPL to GPLv2 + add edd-*-part%n to the persistent.rules + update Debian persistent rules + clarify README + udevd: fix initial timeout handling + force event socket buffer size to 16MB + udevd: move logging from err to info for non-hotplug uevent + fix selinux compilation + libsysfs: accept sysmlinks to directories instead of real directories + +Marco d'Itri: + run_directory: fix typo in "make install" + + +Summary of changes from v069 to v070 +============================================ + +Amir Shalem: + udevd: fix udevd read() calls to leave room for null byte + +Edward Goggin: + scsi_id: derive a UID for a SCSI-2 not compliant with the page 83 + +Greg Kroah-Hartman: + fix nbd error messages with a gentoo rule hack + fix scsi_id rule in gentoo config file + +Jürg Billeter: + EXTRAS/Makefile: fix install targets to match main Makefile + +Kay Sievers: + volume_id: fix error handling with failing read() + EXTRAS: cleanup and sync all Makefiles + add install test to 'make buildtest' + update RELEASE-NOTES + +Olivier Blin: + fix a debug text typo in udev_rules.c + + +Summary of changes from v068 to v069 +============================================ + +Amir Shalem: + fix typo in firmware_helper + +Duncan Sands: + firmware_helper: fix write count + +Kay Sievers: + *_id: fix zero length in set_str() + add program name to logged error + fix exit code of udevinitsend and udevmonitor + udevd: keep the right order for messages without SEQNUM + volume_id: don't probe for mac_partition_maps + udevmonitor: cleanup on exit + path_id: remove SUSE specific PATH + update SUSE rules + add pci_express to bus list + update SUSE rules + store ENV{key}="value" exported keys in the database + fix lookup for name in the udevdb, it should return the devpath + prepare for new HAL udevdb dump + print persistent data with "udevinfo -q all" + change parameter order of udev_db_search_name() + add and use name_list_cleanup() for cleaning up the string lists + don't store devpath in udevdb, we don't need it + add uft8 validation for safe volume label exporting + start to enforce plain ascii or valid utf8 + use WRITE_END/READ_END for the pipe index + remove not needed sig_flag for state of signal_pipe + don't reenter get_udevd_msg() if message is ignored + rename ...trailing_char() to ...trailing_chars() + vol_id: ID_LABEL_SAFE will no longer contain fancy characters + udevd: move some logging to "info" and "err" + remove special TIMEOUT handling from incoming queue + udev_test.pl: we replace untrusted chars with '_' + check the udevdb before assigning a new %e + update RELEASE-NOTES + udevinfo: add database export + write man page masters in DocBook XML + udevinfo: rename dump() to export() + test the automatic man page rebuild and checkin + Makefile: remove all the duplicated rules + all man pages rewritten to use DocBook XML + add missing udevsend man page + also forgot udevmonitor.8 + udevinfo: restore -d option + scsi_id: rename SYSFS to LIBSYSFS + add edd_id tool to match BIOS EDD disk information + move and update libsysfs.txt + klibc: update to version 1.1.1 + delete cdromsymlinks* - obsoleted by cdrom_id and IMPORT rules + delete docs/persistent_naming - obsoleted by persistent disk names + delete old Fedora html page + add "totally outdated" header to docs/overview :) + update SUSE rules + fix useless but funny name_cdrom.pl script to work again + update TODO + Makefile: fix prerequisits for $(PROGRAMS) + Makefile: cleanup install targets + remove chassis_id program + fic gcov use and move it into the Makefile + FAQ: update things that have changed + +Thierry Vignaud: + switch to '==' in raid-devfs.sh + + +Summary of changes from v067 to v068 +============================================ + +Greg Kroah-Hartman: + add EXTRAS documentation to the README file. + Always open the cdrom drive in non-blocking mode in cdrom_id + cdrom_id: change err() to info() to help with debugging problems + +Kay Sievers: + cleanup some debug output and move to info level + unify select() loops + move udevmonitor to /usr/sbin + ENV{TEST}=="1" compares and ENV{TEST}="1" sets the environment + vol_id: fix sloppy error handling + fix typo in cdrom_id syslog + bring std(in|out|err) fd's in a sane state + fix printed udevmonitor header + + +Summary of changes from v066 to v067 +============================================ + +Greg Kroah-Hartman: + added the cdrom.h #defines directly into the cdrom_id.c file + +Kay Sievers: + update SUSE rules + fix make install, as we don't provide a default rule set anymore + fix more compiler warnings ... + fix udevstart event ordering, we want /dev/null very early + don't fail too bad, if /dev/null does not exist + + +Summary of changes from v065 to v066 +============================================ + +Greg Kroah-Hartman: + update gentoo rule file. + Created cdrom_id program to make it easier to determine cdrom types + added cdrom_id to the build check + updated gentoo rule file to handle removable ide devices. + changed cdrom_id exports to be easier to understand and consistant with other _id programs. + fix klibc build issue in cdrom_id.c + Change the gentoo rules to use cdrom_id instead of cdsymlink.sh + changed location of gentoo helper apps to be /sbin instead of in scripts dir + tweak the gentoo rules some more. + +Kay Sievers: + add NETLINK define for the lazy distros + read sysfs attribute also from parent class device + switch some strlcpy's to memcpy + allow clean shutdown of udevd + add flag for reading of precompiled rules + update distro rules files + add SUSE rules + update SUSE rules + add firmware_helper to load firmware + more distro rules updates + update README + remove example rules and put the dev.d stuff into the run_directory folder + trivial text cleanups + update SUSE rules + split udev_util in several files + update SUSE rules + allow logging of all output from executed tools + add Usage: to udevmonitor and udevcontrol + move some logging to the info level + +Thierry Vignaud: + fix udevinfo output + + +Summary of changes from v064 to v065 +============================================ + +Greg Kroah-Hartman: + Added persistent name rules for block devices to gentoo rule file. + Added horrible (but fun) path_id script to extras. + Update gentoo rules file. + +Kay Sievers: + update release notes for next version + add udevmonitor, to debug netlink+udev events at the same time + allow RUN to send the environment to a local socket + fix GGC signed pointer warnings and switch volume_id to stdint + + +Summary of changes from v063 to v064 +============================================ + +Andre Masella: + volume_id: add OCFS (Oracle Cluster File System) support + +Hannes Reinecke: + usb_id: fix typo + add ID_BUS to *_id programs + create_floppy_devices: add tool to create floppy nodes based on sysfs info + +Kay Sievers: + move code to its own files + make SYSFS{} usable for all devices + add padding to rules structure + allow rules to have labels and skip to next label + thread unknown ENV{key} match as empty value + + +Summary of changes from v062 to v063 +============================================ + +Anton Farygin: + fix typo in GROUP value application + +Greg Kroah-Hartman: + add 'make tests' as I'm always typing that one wrong... + Really commit the udev_run_devd changes... + Fixed udev_run_devd to run the /etc/dev.d/DEVNAME/ files too + fix position of raw rules in gentoo config file + +Hannes Reinecke: + dasd_id: add s390 disk-label prober + fix usb_id and let scsi_id ignore "illegal request" + +Kay Sievers: + volume_id: remove s390 dasd handling, it is dasd_id now + trivial fixes for *_id programs + IMPORT: add {parent} to import the persistent data of the parent device + allow multiple values to be matched with KEY=="value1|value2" + udevd: set incoming socket buffer SO_RCVBUF to maximum + remember mapped rules state + ata_id: check for empty serial number + compile dasd only on s390 + +Ville Skyttä: + correct default mode documentation in udev + + +Summary of changes from v061 to v062 +============================================ + +Kay Sievers: + fix symlink values separated by multiple spaces + update RELEASE-NOTES + fix typo in group assignment + fix default-name handling and NAME="" rules + add WAIT_FOR_SYSFS key to loop until a file in sysfs arrives + fix unquoted strings in udevinitsend + +Summary of changes from v060 to v061 +============================================ + +Greg Kroah-Hartman: + Sync up the Debian rules files + fix cdrom symlink problem in gentoo rules + Fix ChangeLog titles + +Kay Sievers: + update RELEASE-NOTES + we want to provide OPTFLAGS + rename ALARM_TIMEOUT to UDEV_ALARM_TIMEOUT + udevd: optimize env-key parsing + don't resolve OWNER, GROUP on precompile if string contains %, $ + set default device node to /dev + create udevdb files only if somehting interesting happened + pack parsed rules list + replace useless defines by inline text + move rule matches to function + add usb_id program to generate usb-storage device identifiers + add IEEE1394 rules to the gentoo rule file + fake also kernel-name if we renamed a netif + allow OPTIONS to be recognized for /sys/modules /sys/devices events + switch gentoo rules to new operators + + +Summary of changes from v059 to v060 +============================================ + +Greg Kroah-Hartman: + Fix the gentoo udev rules to allow the box to boot properly + +Gustavo Zacarias: + Udev doesn't properly build with $CROSS + +Kay Sievers: + Keep udevstart from skipping devices without a 'dev' file + +Marco d'Itri: + #define NETLINK_KOBJECT_UEVENT + + +Summary of changes from v058 to v059 +============================================ + +Greg Kroah-Hartman: + Update the gentoo rule file + Fix udevinfo for empty sysfs directories + Fix makefile to allow 'make release' to work with git + +Hannes Reinecke: + udev: fix netdev RUN handling + udevcontrol: fix exit code + +Kay Sievers: + prepare RELEASE-NOTES + add ID_TYPE to the id probers + add -x to scsi_id to export the queried values in env format + store the imported device information in the udevdb + rename udev_volume_id to vol_id and add --export option + add ata_id to read serial numbers from ATA drives + IMPORT allow to import program returned keys into the env + unify execute_command() and execute_program() + IMPORT=<file> allow to import a shell-var style config-file + allow rules to be compiled to one binary file + fix the fix and change the file to wait for to the "bus" link + fix udevstart and let all events trvel trough udev + prepare for module loading rules and add MODALIAS key + remove device node, when type block/char has changed + Makefile: remove dev.d/ hotplug.d/ from install target + udevcontrol: add max_childs command + udevd: control log-priority of the running daemon with udevcontrol + udeveventrecorder: add small program that writes an event to disk + klibc: add missing files + udevinitsend: handle replay messages correctly + udev man page: add operators + udevd: allow starting of udevd with stopped exec-queue + klibc: version 1.0.14 + udev: handle all events - not only class and block devices + volume_id: use udev-provided log-level + udev: clear lists if a new value is assigned + udev: move dev.d/ handling to external helper + udev: allow final assignments := + udevd: improve timeout handling + Makefile: fix DESTDIR + udevd: add initsend + udevd: add udevcontrol + udevd: listen for netlink events + +Stefan Schweizer: + Dialout group fix for capi devices in the gentoo rules file + +Summary of changes from v057 to v058 +============================================ + +Daniel Drake: + o Writing udev rules docs update + +Darren Salt: + o update cdsymlinks to latest version + +Greg Kroah-Hartman: + o remove detach_state files from the sysfs test tree + o Update permissions on test scripts so they will run properly now + o hopefully fix up the symlinks in the test directory + o Removed klibc/klibc.spec as it is autogenerated + o Added symlinks thanks to Kay's script and git hacking + o add Red Hat/Fedora html documenation + o Update Red Hat default udev rules + +Kay Sievers: + o selinux: fix handling during creation of symlinks + o Fedora udev.rules update + o libsysfs: version 2.0 + o klibc: version 1.0.7 + +Masanao Igarashi: + o Fix libsysfs issue with relying on the detach_state file to be + +Summary of changes from v056 to v057 +============================================ + +<tklauser:access.unizh.ch>: + o fix stupid all_partitions bug + +Kay Sievers: + o add test for make -j4 to build-check + o klibc: version 1.0.6 + o update Debian rules + o apply default permissions only for devices that will need it + o adapt RELEASE-NOTES + o udev_volume_id: fix endianess macros + o udev-test.pl: add test for DEVNAME export to RUN environment + o update the man page to reflect the recent changes + o export DEVNAME to RUN-key executed programs + o fix make -j4 and the local klibc-install + o update RELEASE-NOTES + o add RUN key to be able to run rule based notification + o fix udevtest to print the error if logging is disabled + o move execute_program to utils + add action to init_device + o correct correction for error path for PROGRAM execution + o correct error path for PROGRAM execution + o klibc: version 1.0.5 + o check for strlen()==0 before accessing strlen()-1 + o allow to match against empty key values + o read %s{}-sysfs values at any device in the chain + o udev_rules.c: don't change sysfs_device while walking up the device chain + o klibc: strlcpy/strlcat - don't alter destination if size == 0 + o fix klibc's broken strlcpy/strlcat + o udevinfo: print SYSFS attribute the same way we match it + o remove untrusted chars read from sysfs-values or returned by PROGRAM + o udevinfo: print errors to stderr instead of stdout + o klibc: version 1.0.4 + o support log-priority levels in udev.conf + o test-suite: remove UDEV_TEST, it's not needed anymore + o libsysfs: remove trailing slash on SYSFS_PATH override + + +Summary of changes from v055 to v056 +============================================ + +<tklauser:access.unizh.ch>: + o fix header paths in udev_libc_wrapper.c + +Kay Sievers: + o udev-test.pl: use more common user/group names + o klibc: remove SCCS directories from the temporary klibc install + o udev-test.pl: add a test where the group cannot be found in /etc/passwd + o udev-test.pl: add check for textual uid/gid + o fix bad typo that prevents the GROUP to be applied + o udevd: don't delay events with TIMEOUT in the environment + o klibc: use klcc wrapper instead of our own Makefile + o change call_foreach_file to return a list + + +Summary of changes from v054 to v055 +============================================ + +<jkluebs:luebsphoto.com>: + o This patch causes the remove handler to check that each symlink actually points to the correct devnode and skip it if it does not. + +<pebenito:gentoo.org>: + o udev selinux fix + +<tklauser:access.unizh.ch>: + o The following patch fixes some warnings when compiling volume_id from udev with the -Wall compiler flag. Define _GNU_SOURCE for strnlen() and correct the path to logging.h + o The following patch fixes a warning when compiling chassis_id from udev with the -Wall compiler flag. There are too much conversions in the format string of sscanf(). One %d can be dropped. + +Greg Kroah-Hartman: + o fix raid rules + o added frugalware udev ruleset + o merge selinux and Kay's symlink fixes together + +Hannes Reinecke: + o volume_id: Fix label/uuid reading for reiserfs + +Kay Sievers: + o add udevstart to the RELEASE-NOTES + o volume_id: version 43 + o clarify the shortcomings of %e + o correct rule match for devices without a physical device + o remove unneeded code, libsysfs does this for us + o add final release note + o add ENV{} key to match agains environment variables + o simplify sysfs_pair handling + o add a test and simplify debug statement + o support =, ==, !=, += for the key match and assignment + o add OPTION="last_rule" to skip any later rule + o rename namedev_dev to udev_rule + o correct enum device_type + o remove udevstart on make clean + o volume_id: version 42 + o volume_id: version 41 + o remove unneeded include + o The path to dlist.h is not correct + o udevinfo -d: use '=' as separator, cause ':' may be a part of the devpath + o klibc: version 1.0.3 + o add RELEASE-NOTES file + o test suite: move "driver" link to physical device + o remove PLACE key match + o don't lookup "root" in the userdb + o fix ia64 compile + o fix segfaulting udev while DRIVER matching + o cleanup list.h + o klibc: version 0.214 + o rename device_list->list to device_list->node + o replace strncpy()/strncat() by strlcpy()/strlcat() + o split udev and udevstart + o udev_volume_id: version 39 + o rename LOG to USE_LOG in all places + o remove Makefile magic for klibc integration + o klibc_fixups: remove no longer needed stuff + o udev_volume_id: volume_id v38 + o use numeric owner/group as default values to avoid parsing userdb + o fix up segfaulting binaries with new klibc + o udevinfo -d: speed-up device dump + o klibc: version 0.211 + o klibc_fixups: remove unneeded stuff + o replace weird defines by real code + o udev-test.pl: remove useless tests + o allow unlimitied count of symlinks + o unmap db-file after use + o remove typedef for call_foreach_file() handler function + o correct udev_init_device + o rename attributes to options + o kill stupid gcc4 warning + o trivial clenaup of namedev code + o klibc: check for gcc4 + o klibc: update v0.205 + +Thierry Vignaud: + o gentoo rule update for raid devices + + +Summary of changes from v053 to v054 +============================================ + +<tklauser:access.unizh.ch>: + o udev_volume_id: add Reiser4 support + +Kay Sievers: + o namedev: skip backslashes only if followed by newline + o wait_for_sysfs: add joydev + o udevinfo: print devpath -> node relationship for all devices + o trivial rename of some variables + o klibc v0.199 + o big libsysfs diet (pre 2.0 version) + o udev_volume_id: volume_id v35 + o add "serio" to bus list + o determine device type in udev_init_device() + o move kernel name/number evaluation into udev_init_device() + o detect NAME="" as ignore_device rule + o trivial namedev cleanup + o cleanup db functions + o clean up match_place() + o switch device type to enum + o switch major/minor to dev_t + o remove the device node only if the major/minor number matches + o libsysfs: work around a klibc bug + o introduce OPTIONS=ignore_device, ignore_remove, all_partitions" key + o namedev: execute PROGRAM only once and not possibly for every physical device + +Patrick Mansfield: + o update scsi_id to work with libsysfs changes + + +Summary of changes from v052 to v053 +============================================ + +Greg Kroah-Hartman: + o fix gentoo fb permission issue + o allow simple-build-check.sh to go faster if MAKEOPTS is set + o make the release tarballs have writable files in them + o remove gentoo permission file as it's not valid anymore + +Kay Sievers: + o fix special file mode mask for temporary device node + o udevstart: simplify "dev" file searching + o udev_volume_id: remove temporary node creation and parent handling + o add %P modifier to query the node name of the parent device + o udev_volume_id: remove __packed__ from dasd structure as it does not work + o create /block/*/range count of partitons for all_partitions + +Patrick Mansfield: + o scsi_id changes for use with udev %N and %p + + +Summary of changes from v051 to v052 +============================================ + +<md:linux.it>: + o debian: update rules files + o raid-devfs.sh: devfs names for hardware RAID controllers + o scsi_id: when udevstart is started, /tmp is not writeable + o cdsymlinks.sh: trivial fix, the variable is initialized to '', not 0 + +<sschweizer:gmail.com>: + o gentoo/udev.rules: add default permissions for sound devices + +Greg Kroah-Hartman: + o fix example comment in ide-devfs.sh + o Add infiniband to gentoo rules + o Another gentoo fix, adding dvb support + o Fix gentoo bug #76056 (fb device group permissions.) + o Fix gentoo bug #81102, device nodes for the pktcdvd device + +Kay Sievers: + o provide temporary device node for callouts to access the device + o udev_volume_id: fix dasd disklabel reading with -l option + o udev_volume_id: volume_id version 034 + o udev_volume_id: rename probe_ibm into probe_dasd + o udev_volume_id: volume_id version 032 + o Makefile: add some more warnings and prepare for clean gcc4 compile + o Makefile: cleanup conditional config option sections + o fix -Wsign-compare warnings + o chassis_id: clean compilation and fix bad function parameter passing + o simple_build_check: make it possible to pass KERNEL_DIR + o selinux: cleanup udev integration + +Michael Buesch: + o trivial: remove _all_ trailing slashes with no_trailing_slash() + o trivial: fix signedness + o namdev: allow symlink-only rules to specify node permissions + o udevd: fix valgrind warning + + +Summary of changes from v050 to v051 +============================================ + +<roland:digitalvampire.org>: + o This fixes a silly mistake in how udevinfo prints the major and minor numbers (right now it prints the minor next to "MAJOR" and the major next to "MINOR" ;) + +<tklauser:access.unizh.chbk>: + o I tried to compile udev 050plus with the GCC 4.0 snapshot 200412119 and got two errors about possibly uninitialized structs, so I fixed this. + +Christian Bornträger: + o udev_volume_id: fix -d option + +Greg Kroah-Hartman: + o gentoo fb permission fix + o fix gcc 2.96 issue in libsysfs + o remove the lfs startup script on request of the author + o clean up the aoe char device rules, and delete the block one as it's not needed + o add aoe block and char device rules to the gentoo rule file + o fix udev_volume_id build error + +Hannes Reinecke: + o rearrange link order in Makefile + +Kay Sievers: + o udev_volume_id: new version of volume_id + o klibc: update to version 0.198 + o udev_volume_id: fix FAT label reading + o klibc: update to version 0.196 + o udevd: throttle the forking of processes + o udevd: add possible initialization of expected_seqnum + o udevd: it's obviously not the brightest idea to exit a device node manager if it doesn't find /dev/null + o udevd: separate socket handling to prepare for other event sources + o udevd: support -d switch to become a daemon + o udev_volume_id: version 27 + o udevd: split up message receiving an queueing + o remove useless warning if udev.conf contains keys not read by udev itself + o improve event sequence serialization + o remove udevsend syslog noise on udevd startup + o limit the initial timeout of the udevd event handling + o correct detection of hotplug.d/ udevsend loop + o correct log statement + o remove default_* permissions from udev.conf file + o update Fedora config files and add some more tests + o allow permissions only rules + o add SUBSYSTEM rule to catch all block devices and apply the disk permissions + o update Fedora config files + o handle renamed network interfaces properly if we manage hotplug.d/ + o allow multiline rules by backslash at the end of the line + o add OnStream tape drive rules + o simplify rules file by setting default mode to 0660 + o simplify permission application + o I broke the extras/ again. Add simple build test script now + o Merge vrfy.org:/home/kay/src/udev into vrfy.org:/home/kay/src/udev.kay + o initial merge of fedora udev.permissions into udev.rules + o remove permissions file mentioning from the udev man page + o fix some typos in gentoo's udev.rules introduced by the merge + +Michael Buesch: + o The attached patch fixes the code path if namedev_name_device() fails + +Summary of changes from v049 to v050 +============================================ + +<harald:redhat.com>: + o selinux patch + +<tklauser:access.unizh.ch>: + o I made some more changes to the manpage of udev including + +Kay Sievers: + o update libsysfs to CVS version and fix segfaulting attribute reading + o klibc supports LOG_PID now, so remove our own implementation + o avoid building klibc test programs and pass SUBDIRS= to klibc clean + + +Summary of changes from v048 to v049 +============================================ + +Greg Kroah-Hartman: + o fix 'make clean' error in klibc + +Kay Sievers: + o update klibc to 0.194 + o export DEVNAME regardless of the state of udev_dev_d + o add class specific files for class/spi_transport and class/spi_host + o udevd-test.pl: remove wrong date calculation + o check earlier if we should run as udevstart + o remove double initialization + o include missing header to udevtest.c + o add -V option to udev to print the version number + o prevent udev node creatinon for "class" registration + o udevd: serialization of the event sequence of a chain of devices + o add a class/fc_host file to the list of what to wait for + o udev_volume_id: links sysfs.a instead of all objects + +Martin Schlemmer: + o remove leftover from udevinfo's -d option + + +Summary of changes from v047 to v048 +============================================ + +Greg Kroah-Hartman: + o fix udev_volume_id so it will now build properly + o fix scsi_id build errors due to changes in the main udev makefile + + +Summary of changes from v046 to v047 +============================================ + +<klauser:access.unizh.ch>: + o Various typos and other litte errors in udev.8.in + +<sjoerd:spring.luon.net>: + o DEVNAME on device removal + +<sschweizer:gmail.com>: + o Allow GROUP to have modifiers in it + +Greg Kroah-Hartman: + o add more debian rules files + o move distro specific config files into their own directories + o update debian rules files + o added asterix rules to the gentoo file + o use udevstart for udev.init.* files + o delete a bunch of files no longer needed + o fix gentoo scsi cdrom rule + o Fix the multithreaded build again + o merge + o comment out ability to run udev-test.pl with valgrind + o fix spurious valgrind warning in udev + o fix udevinfo '-q path' option as it was not working + o merge + o fix parallel build error + +Kay Sievers: + o update Fedora dev.d/ example and remove unused conf.d/ directory + o don't install distribution specific init script on "make install" + o restore OWNER/GROUP assignment in rule coming from RESULT + o make gcov compile scripts working with recent gcc + o fix udev-test/udev-test.pl to work with again + o add net/atml and class/ppdev to the wait_for_sysfs exception list + o add net/nlv* devices to the exception list + o add "pcmcia" and "fc_transport" to the wait_for_sysfs lists + o remove unused timestamp field + o simplify permission handling + o handle /etc/hotplug.d/ only if the event comes from udevd + o trivial cleanups and change some comments + o remove unused variables + o udevsend/udevd handle events without a subsystem + o use blacklist on device "remove" and remove dev.d/ call code duplication + o update the man pages and correct Usage: hints + o don't call the hotplug scripts with a test run + o don't call dev.d/ scripts twice, if directory = subsystem + o remove archive file if we changed something + o link archive insted of objects + o rename udev_lib to udev_utils and dev_d to udev_multiplex + o handle whole hotplug event with udevd/udev + o integrate wait_for_sysfs in udev + o make the searched multiplex directories conditionally + o add MANAGED_EVENT to the forked udev environment + o export DEVNAME on remove event + o export udev_log flag to the environment + o remove my test code + o add support for /devices-devices without any file to wait for + o Patch from Alex Riesen <raa.lkml@gmail.com> + o add a bunch of busses to the list of what to wait for + o close connection to syslog in forked udevd child + o udevd exit path cleanup + o fix network device naming bug + + +Summary of changes from v045 to v046 +============================================ + +Greg Kroah-Hartman: + o make spotless for releases + +Kay Sievers: + o Don't try to print major/minor for devices without a dev file + o remove get_device_type and merge that into udev_set_values() + o prevent udevd crash if DEVPATH is not set + o add ippp and bcrypt to the exception lists of wait_for_sysfs + o let klibc add the trailing newline to syslog conditionally + o disable logging for udevstart + o add NAME{ignore_remove} attribute + o remove historical SYSFS_attr="value" format + o don't wait for sysfs if the kernel(2.6.10-rc2) tells us what not to expect + o change key names in udevinfo sysfs walk to match the kernel + o support DRIVER as a rule key + o support SUBSYSTEM as a rule key + o rename udevdb* to udev_db* + o Make dev.d/ handling a separate processing stage + o make the udev object available to more processing stages + o remove udev_lib dependency from udevsend, which makes it smaller + o add ACTION to udev object to expose it to the whole process + o make udevinfo's -r option also workimg for symlink queries + o let udev act as udevstart if argv[1] == "udevstart" + o improve udevinfo sysfs info walk + o add sysfs info walk to udevinfo + o pass the whole event environment to udevd + o replace tdb database by simple lockless file database + + +Summary of changes from v044 to v045 +============================================ + +Martin Schlemmer: + o Some updates for Gentoo's udev rules + + +Summary of changes from v043 to v044 +============================================ + +Greg Kroah-Hartman: + o add cdsymlinks.sh support to gentoo rules file + o fix gentoo legacy tty rule + o remove 'sudo' usage from the Makefile + o make udev-test.pl test for root permissions before running + +Kay Sievers: + o reduce syslog noise of udevsend if multiple instances try to start udevd + o add i2c-dev to the list of devices without a bus + + +Summary of changes from v042 to v043 +============================================ + +Greg Kroah-Hartman: + o add test target to makefile + o add dumb script to show all sysfs devices in the system + +Kay Sievers: + o Shut up wait_for_sysfs class/net failure messages, as it's not possible to + get that right for all net devices. Kernels later than 2.6.10-rc1 will + handle that by carrying the neccessary information in the hotplug event. + o wait() for specific pid to return from fork() + o Don't use any syslog() in signal handler, cause it may deadlock + o Add support for highpoint ataraid to volume_id to suppress label reading on raid set members. + o Add a bunch of devices without "device" symlinks + o Exit, if udevtest cannot open the device (segfault) + o Patches from Harald Hoyer <harald@redhat.com> + o Apply the default permissions even if we found a entry in the permissions + file. Correct one test, as the default is applied correctly now and the + mode will no longer be 0000. + o add test for format chars in multiple symlinks to replace + o Add net/vmnet and class/zaptel to the list of devices without physical device + + +Summary of changes from v040 to v042 +============================================ + +Greg Kroah-Hartman: + o add inotify to the rules for gentoo + +Kay Sievers: + o skip waiting for device if we get a bad event for class creation and not for a device underneath it + o add net/pan and net/bnep handling + o switch wait for bus_file to stat() instead of open() add net/tun device handling add ieee1394 device handling + o Remove the last klibc specific line from the main udev code Move _KLIBC_HAS_ARCH_SIG_ATOMIC_T to the fixup file which is automatically included by the Makefile is we build with klibc + o ignore *.rej files from failed patches + o update to libsysfs 1.2.0 and add some stuff klib_fixup Now we have only the sysfs.h file different from the upstream version to map our dbg() macro. + o improve klibc fixup integration + o cleanup udevd/udevstart + o expose sysfs functions for sharing it + + +Summary of changes from v039 to v040 +============================================ + +<jk:blackdown.de>: + o wait_for_sysfs update for dm devices + +Greg Kroah-Hartman: + o sparse cleanups on the tree + o fix stupid cut-and-paste error for msr devices on gentoo boxes + o add *~ to bk ignore list + o delete udevruler.c as per Kay's request + o fix up the wait_for_sysfs_test script a bit + +Kay Sievers: + o fix debug in volume id / fix clashing global var name + o volume_id fix + o $local user + o cleanup netif handling and netif-dev.d/ events + o big cleanup of internal udev api + o don't wait for dummy devices + o close the syslog + o Fix ppp net devices in wait_for_sysfs + o Fix wait_for_sysfs messages (more debugging info) + + +Summary of changes from v038 to v039 +============================================ + +Greg Kroah-Hartman: + o Hopefully fix the vcs issue in wait_for_sysfs + o take out & from wait_for_sysfs_test that I previously missed + o add very nice cdsymlinks scripts + o add some helper scripts for dvb and input devices + o add debian config files + o let the extras/ programs build "pretty" also + o tweak the ccdv program to handle files in subdirectories being built + o crap, I messed up the 'sed' instances pretty badly, this fixes the config and man page mess + o fix broken 'make -j5' functionality + +Kay Sievers: + o swich attribute open() to simple stat() + o wait_for_sysfs update for /class/firmware and /class/net/irda devices + o fix unusual sysfs behavior for pcmcia_socket + o remove sleeps from udev as it is external now + o delete udevruler? + o Makefile fix + +Patrick Mansfield: + o update udev to scsi_id 0.7 + o pass SYSFS setting down for extras builds + o move assignments past local variables + + +Summary of changes from v037 to v038 +============================================ + +<andrew.patterson:hp.com>: + o Re: Problem parsing %s in udev rules + +Greg Kroah-Hartman: + o fix up error in building extras and libsysfs + +Summary of changes from v036 to v037 +============================================ + +<md:linux.it>: + o small udev patch + +Greg Kroah-Hartman: + o fix compilation warning in tdb log message + o Fix build error with klibc due to recent changes + o merge + o add wait_for_sysfs test script to the tarball to help people debug their boxes + o add ipsec to wait_for_sysfs ignore list + o added ccdv to bk ignore list + o a few more Makefile tweaks for the quiet feature + o Make the build silent, thanks to a helper program from ncftp + o rename files to have '_' instead of '-' in them + o change max time to wait in wait_for_sysfs to 10 seconds to hopefully handle some slow machines + o add support for class/raw/ to wait_for_sysfs + o fix up Makefile for wait_for_sysfs udev_version.h dependancy + o remove the debian specific file, as they don't want to share with the rest of the world :( + +Kay Sievers: + o prevent deadlocks on an corrupt udev database + o wait_for_sysfs_update + +Michael Buesch: + o fix asmlinkage + o fix incompatible pointer type warning + + +Summary of changes from v035 to v036 +============================================ + +Greg Kroah-Hartman: + o add the error number to the error message in wait_for_sysfs to help out in debugging problems + +Summary of changes from v034 to v035 +============================================ + +Greg Kroah-Hartman: + o added ieee1394 support to wait_for_sysfs + o update wait_for_sysfs with a bunch more devices thanks to user reports + +Summary of changes from v033 to v034 +============================================ + +Kay Sievers: + o wait_for_sysfs bluetooth class update + +Greg Kroah-Hartman: + o add comment in wait_for_sysfs to explain the structure better + o Revert previous dev_d.c change, it's not what is causing HAL problems + o hm, somethings odd with DEVPATH, see if this fixes it + o 33_bk mark for the makefile + o wait_for_sysfs: clean up the logic for the list of devices that we do not expect device symlinks for + o get rid of annoying extra lines in the syslog for some libsysfs debug messages + o added support for i2c devices in wait_for_sysfs.c + o add support for i2c-adapter devices to wait_for_sysfs.c + +Summary of changes from v032 to v033 +============================================ + +<harald:redhat.com>: + o udev close on exec + o some cleanups and security fixes + o some cleanups and security fixes + o selinux for udev + o cleanup PATCH for extras/chassis_id/Makefile + +<kpfleming:backtobasicsmgmt.com>: + o respect prefix= setting in built udev.conf (updated) + +Greg Kroah-Hartman: + o add support for usb interfaces to wait_for_sysfs to keep it quiet + o enable native tdb spinlocks on i386 platforms + o delete extras/multipath-tools as per the author's request + o be paranoid in dev_d.c + o add USE_SELINUX to README documentation so people have a chance to see what is going on + o update the selinux.h file to start to look sane + o update bk ignore list for the wait_for_sysfs binary + o kdetv wants to see device nodes in /dev + o update comments in scsi-devfs.sh + o fix up Makefiles to get the klibc build working properly + o update bk ignore list for new klibc generated files + o oops forgot to add the new klibc/include directory + o update klibc to version 0.181 + +Kay Sievers: + o fix problems with dev.d and udevstart + o wait_for_sysfs debug cleanup + o fix problems using scsi_id with udevstart + o update volume_id + o finally solve the bad sysfs-timing for all of us + o volume-id build fix and update + o switch udev's seqnum to u64 + o add enum tests + o fix udev segfaults with bad permissions file + +Patrick Mansfield: + o update udev to include scsi_id 0.6 + + +Summary of changes from v031 to v032 +============================================ + +<harald:redhat.com>: + o udev parse bug + +Kay Sievers: + o handle only block and class devices + o fix udevstart badly broken in udev 031 + + +Summary of changes from v030 to v031 +============================================ + +<arun:codemovers.org>: + o udev - read long lines from config files overflow fix + +<ballarin.marc:gmx.de>: + o Update the FAQ with info about hardlink security + +<david:fubar.dk>: + o compatibility symlinks for udev + +David Weinehall: + o Minor POSIX-fixes for udev + +Greg Kroah-Hartman: + o add symlink for video rule + o add a "first" list to udevstart and make it contain the class/mem/ devices + o fix compiler warning in udevtest.c + o Fix old-style pty breakage in rules file for tty device + o add rules for i386 cpu devices + o add permission for legotower usb devices + +Kay Sievers: + o Fix naming ethernet devices in udevstart + o update udev_volume_id + o let /sbin/hotplug execute udev earlier + o pass SEQNUM trough udevd + o fix manpages based on esr's spambot + +Martin Schlemmer: + o add microcode rule to permissions.gentoo file + +Michael Buesch: + o Try to provide a bit of security for hardlinks to /dev entries + +Olaf Hering: + o udevsend depends on udev_lib.o + +Tom Rini: + o fix UDEV_NO_SLEEP + o clean up start_udev a bit + o Make udev/udevstart be one binary + o Add 'asmlinkage' to udev-030 + + +Summary of changes from v029 to v030 +============================================ + +Greg Kroah-Hartman: + o fix stupid off-by-one bug that caused udevstart to die on x86-64 boxes + + +Summary of changes from v028 to v029 +============================================ + +Greg Kroah-Hartman: + o add permission rule for jogdial device + o fix dumb bug I added to udevstart + o make a "last list" of devices for udevstart to operate on last + o fix permission problem with input event and ts nodes for gentoo + o change default perms of misc/rtc to be readable by anyone + +Olaf Hering: + o allow NAME_SIZE > SYSFS_PATH_MAX + + +Summary of changes from v027 to v028 +============================================ + +<atul.sabharwal:intel.com>: + o Patch for chassis_id exras module + +Daniel Drake: + o Writing udev rules doc update + +Greg Kroah-Hartman: + o clean up block whitelist search logic a bit + o reverse order of scanning of udevstart to look at class before block + +Kay Sievers: + o update udev_volume_id + +Leann Ogasawara: + o udevstart performance increase + +Patrick Mansfield: + o update udev scsi_id to scsi_id 0.5 + + +Summary of changes from v026 to v027 +============================================ + +<fork0:users.sf.net>: + o fix handle leak in udev_lib.c + +Greg Kroah-Hartman: + o tweak the gentoo default permission rules as they are wrong for tty and misc devices + + +Summary of changes from v025 to v026 +============================================ + +Arnd Bergmann: + o udev rpm fix + +Greg Kroah-Hartman: + o add test for ! in partition name + o 025_bk mark + o Update to version 117 of klibc (from version 108) + o add volume_id ignore rule for bk + o add volume_id support to the udev.spec file + o remove dbus and selinux stuff from the udev.spec file + o delete udev_selinux as it doesn't work properly and is the wrong way to do it + o Deleted the udev_dbus extra as it didn't really work properly and HAL has a real solution now + o add udev.permissions.slackware file + o udevstart: close open directories + +Kay Sievers: + o fix udevd zombies + o catchup with recent klibc + o Re: udevsend fallback + o udev_volume_id update + o udev callout for reading filesystem labels + o udev callout for reading filesystem labels + o udev default config layout changes + +Leann Ogasawara: + o evaluate getenv() return value for udev_config.c + +Summary of changes from v024 to v025 +============================================ + +<md:linux.it>: + o devfs.sh-ide-floppy + +<sjoerd:spring.luon.net>: + o DEVNODE -> DEVNAME transition fixes + +Daniel Drake: + o Update writing udev rules docs + +Greg Kroah-Hartman: + o make dev.d call each directory in the directory chain of the device name, instead of just the whole name + o add devd_test script + o add more permissions based on SuSE's recommendations + o added rules for tun and raw devices + o add udev conf.d file + o Switch the default config to point to a directory for the rules and permission files + o update the Red Hat .dev files to work on other distros + o add dbus.dev, pam_console.dev and selinux.dev files for /etc/dev.d/default/ usage + o add hints for red hat users from Leann Ogasawara <ogasawara@osdl.org> + o add scripts to run gcov for udev from Leann Ogasawara <ogasawara@osdl.org> + o change permissions on udevd test scripts + o Fix build process for users who have LC_ALL set to a non-english language + o Added expanded tests to the test framework from Leann Ogasawara <ogasawara@osdl.org> + o added execelent "writing udev rules" document from Daniel Drake <dan@reactivated.net> + o added rule to put USB printers in their proper places + o added rules for CAPI devices + o added a dev.d alsa script to help people out + +Kay Sievers: + o fix test regressions + o udev_selinux changes + o udevd test script + o udev_dbus changes + o fix devpath for netdev + +Leann Ogasawara: + o gcov for udev + + +Summary of changes from v023 to v024 +============================================ + +<atul.sabharwal:intel.com>: + o Add README for chassis_id + o Add chassis_id program to extras directory + +<chris_friesen:sympatico.ca>: + o udevd race conditions and performance, assorted cleanups + +<hare:suse.de>: + o fix SEGV in libsysfs/dlist.c + +<maryedie:osdl.org>: + o add OSDL documentation for persistent naming + +<md:linux.it>: + o small ide-devfs.sh fix + +Greg Kroah-Hartman: + o remove compiler warning from udevd.c + o only generate udev.8 on the fly, not all other man pages + o update bk ignore list some more + o update bk ignore list + o switch to generate the man pages during the normal build, not during the install + o convert udev.8.in to use @udevdir@ macro for make install + o first step of making man pages dynamically generated + o add install and uninstall the etc/dev.d/net/hotplug.dev file to the Makefile + o tweak net_test a bit + o fix some segfaults when running udevtest for network devices + o make a net_test test script using udevtest + o handle the subsytem if provided in udevtest + o add hotplug.dev script to handle renamed network devices + o add a bunch of network class devices to the test sysfs tree + o add udevruler to the bk ignore list + o update RFC-dev.d docs due to DEVNODE to DEVNAME change + o clean up chassis_id coding style + o clean up the OSDL document formatting a bit + o add netlink rules to devfs and gentoo rules files + o added USB device rules to rules files + o clean up the gentoo rules file a bit more, adding dri rules + o fix up udev.rules to handle oss rules better + o 023_bk mark + o fix udev.spec file for where udevtest should be placed + +Kay Sievers: + o tweak node unlink handling + o switch udevd's msg_dump() to #define + o handle netdev in udevruler + o man page cleanup + o put config info in db for netdev + o increase udevd event timeout + o udevstart fix + o put netdev handling and dev.d/ in manpages + o DEVPATH for netdev + o netdev - udevdb+dev.d changes + o udevd race conditions and performance, assorted cleanups - take 2 + o udevinfo patch + o dev_d.c file sorting and cleanup + o apply all_partitions rule to main block device only + + +Summary of changes from v022 to v023 +============================================ + +Kay Sievers: + o hmm, handle net devices with udev? + o correct apply_format() for symlink only rules + o don't init namedev on remove + o first stupid try for a rule compose gui + o replace fgets() with mmap() and introduce udev_lib.[hc] + o make udevtest a real program :) + +Daniel E. F. Stekloff: + o udevinfo patch + +Greg Kroah-Hartman: + o create the /etc/dev.d/ directories in 'make install' + o actually have udev run files ending in .dev in the /etc/dev.d/ directory as documented + o added RFC-dev.d document detailing how /etc/dev.d/ works + o fixed up udev.spec to handle selinux stuff properly now + o remove USE_DBUS and USE_SELINUX flags from the README as they are no longer present + o remove selinux stuff from the main Makefile + o move udev_selinux into extras/selinux + o fix dbus build in the udev.spec file + o remove dbus stuff from main Makefile + o move udev_dbus to extras/dbus + o udev_dbus can now compile properly, but linnking is another story + o remove udev_dbus.h from Makefile + o first cut at standalone udev_selinux program + o remove selinux support from udev core as it's no longer needed + o first cut at standalone udev_dbus program + o add get_devnode() helper to udev_lib for udev_dbus program + o remove dbus code from core udev code as it's no longer needed to be there + o add /etc/dev.d/ support for udev add and remove events + o fix build error in namedev.c caused by previous patch + o 022_bk tag + o fix 'make spotless' to really do that in klibc + o add a question/answer about automounting usb devices to the FAQ + o mark scsi-devfs.sh as executable + o Increase the name size as requested by Richard Gooch <rgooch@ras.ucalgary.ca> + o fix udevtest to build properly after the big udev_lib change + +Olaf Hering: + o uninitialized variable for mknod and friend + +Richard Gooch: + o SCSI logical and physical names for udev + +Theodore Y. T'so: + o Trivial man page typo fixes to udev + + +Summary of changes from v021 to v022 +============================================ + +<ananth:in.ibm.com>: + o more Libsysfs updates + o Libsysfs updates + +<async:cc.gatech.edu>: + o fix HOWTO-udev_for_dev for udevdir + +Kay Sievers: + o udev-test.pl cleanup + o add dev node test to udev-test.pl + o add permission tests + o "symlink only" test + o callout part selector tweak + o cleanup callout fork + o allow to specify node permissions in the rule + o man page beauty + o put symlink only rules to the man page + o rename strn*() macros to strmax + o conditional remove of trailing sysfs whitespace + o clarify udevinfo text + o better fix for NAME="foo-%c{N}" gets a truncated name + o overall trivial trivial cleanup + o fix NAME="foo-%c{N}" gets a truncated name + o cleanup mult field string handling + +<ken:cgi101.com>: + o fix a type in docs/libsysfs.txt + o Added line to udev.permissions.redhat + o Include more examples in the docs area for gentoo and redhat + +<md:linux.it>: + o udevstart fixes + +Greg Kroah-Hartman: + o add big major tests to udev-test.pl + o add a test for a minor over 255 + o udev-test.pl: print out major:minor and perm test "ok" if is ok + o make perm and major:minor test errors be reported properly + o remove extra ; in namedev_parse.c + o Added multipath-tools 0.1.1 release + o deleted current extras/multipath directory + o 021_bk mark + o fix the build for older versions of gcc + +Hanna V. Linder: + o Small fix to remove extra "will" in man page + +Olaf Hering: + o make spotless + o udev* segfaults with new klibc + +Patrick Mansfield: + o add tests for NAME="foo-%c{N}" + +Summary of changes from v020 to v021 +============================================ + +Kay Sievers: + o install udevinfo in /usr/bin + o blacklist pcmcia_socket + +Greg Kroah-Hartman: + o fix udev.spec to find udevinfo now that it has moved to /usr/bin + o Fix another problem with Makefile installing initscript + o fix the Makefile to install the init script into the proper directory + o make spec file turn off selinux support by default + + +Summary of changes from v019 to v020 +============================================ + +<christophe.varoqui:free.fr>: + o multipath update + +Kay Sievers: + o man page udevstart + o cleanup udevstart + o bugfix for local user + o unlink bugfix + o TODO update + o clarify udevinfo device walk + o udevinfo symlink reverse query + o fix stroul endptr use + o add $local user spport for permissions + o udev - man page update + o udev - fix debug info for multiple rule file config + o udev - kill udevd on install + o udev - activate formt length attribute + o udev - safer sprintf() use + +<md:linux.it>: + o no error on enoent + o escape dashes in man pages + o remove usage of expr in ide-devfs.sh + +<rml:ximian.com>: + o automatically install correct initscript + o update documetation for $local + +Andrey Borzenkov: + o Add symlink only rules support + +Greg Kroah-Hartman: + o update the TODO list as we already have a devfs config file + o make start_udev use udevstart binary + o install udevstart + o Remove Debian permission files as the Debian maintainer doesn't seem to want to share :( + o update the Gentoo rules files + o Add Red Hat rules and permissions files + o add udevstart to the ignore list + o add udevstart program based on a old patch from Harald Hoyer <harald@redhat.com> + o unlink the file before we try to create it + o Merge greg@bucket:/home/greg/src/udev into kroah.com:/home/greg/src/udev + + +Summary of changes from v018 to v019 +============================================ + +Kay Sievers: + o TODO update + o udev - correct relative symlink + o udev - safer string handling - part four + o udev - safer string handling - part three + o udev - safer string handling - part two + o udev - man page update + o udev - safer string handling all over the place + o manpage update + o udev - allow all files in a directory as the config + o udev - simple klibc textual uid/gid handling + +Andrey Borzenkov: + o do not remove real .udev.tdb during RPM build + +Greg Kroah-Hartman: + o add new TODO item about local user permissions + o Add initial SELinux support for udev + o fix build for very old versions of make + o remove limit of the number of args passed to PROGRAM + o force udev to include the internal version of libsysfs and never the external one + o fix up libsysfs header file usage to fix bug reports from users that have sysfsutils installed already + o remove udevtest on 'make clean' + o remove udevd priority TODO item, as it's not needed at all + +Patrick Mansfield: + o update udev scsi_id to scsi_id 0.4 + + +Summary of changes from v017 to v018 +============================================ + +<ext.devoteam.varoqui:sncf.fr>: + o [PATCH] symlink dm-[0-9]* rule + o update extras/multipath + +<john-hotplug:fjellstad.org>: + o init.d debian patch + +Kay Sievers: + o udev - TODO update + o udev - add %s{filename} to man page + o udev - udevd/udevsend man page + o udev - switch callout part selector to {attribute} + o udev - switch SYSFS_file to SYSFS{file} + o udev - create all partitions of blockdevice + o allow SYSFS{file} + o Adding '%s' format specifier to NAME and SYMLINK + +Greg Kroah-Hartman: + o added some scsi_id files to the bk ignore file + o added scsi_id and some more documentation to the udev.spec file + o update udev.rules.gentoo with new config file format + o Update the Gentoo udev.rules and udev.permissions files + o Create a udev.rules.examples file to hold odd udev.rules + o add udevd priority issue to the TODO list + o more HOWTO cleanups + o add HOWTO detailing how to use udev to manage /dev + o mv libsysfs/libsysfs.h to libsysfs/sysfs/libsysfs.h to make it easier to use + o add start_udev init script + o add support for UDEV_NO_SLEEP env variable so Gentoo people will be happy + o start up udevd ourselves in the init script to give it some good priorities + o update the red hat init script to handle nodes that are not present + o add a "old style" SYSFS_attribute test to udev-test.pl + o Have udevsend report more info in debug mode + o Have udevd report it's version in debug mode + o fix up bug created for udevtest in previous partition creation patch + o update the udev.spec to add udevtest and make some more Red Hat suggested changes + o add ability to install udevtest to Makefile + o 017_bk mark + o Add another test to udev-test.pl and fix a bug when only running 1 test + o Fix bug where we did not use the "converted" kernel name if we had no rule + +Patrick Mansfield: + o udev use new libsysfs header file location + o udev add some ID tests + + +Summary of changes from v016 to v017 +============================================ + +<azarah:nosferatu.za.org>: + o make logging a config option + +<christophe.varoqui:free.fr>: + o more udev-016/extras/multipath + o more udev-016/extras/multipath + o update extras/multipath + +Kay Sievers: + o udev - keep private data out of the database? + o better credential patch + o udevd - client access authorization + o compile udevd with klibc + o udev - fix "ignore method" + o udev - fix cdrom symlink rule + o convert udevsend/udevd to DGRAM and single-threaded + o udevd - kill the lockfile + o udevd - fix socket path length + o udevd - switch socket path to abstract namespace + o udevd - allow to bypass sequence number + o include used function + +Greg Kroah-Hartman: + o add udev_log to the documentation + o fix offsetof() define in klibc + o add some .spec file changes from Red Hat + o update the init.d udev script based on a patch from Red Hat + o remove the .udev.tdb when installing or uninstalling to be safe + o remove the database at startup + o fix bug in permission handling + o update klibc to version .107 + o update the bitkeeper ignore file list + o add udevtest program to build + o fix problem where usb devices can be either the main device or the interface + o more logging.h cleanups to be a bit more flexible + o stop using mode_t as different libcs define it in different ways :( + o remove some more KLIBC fixups that are no longer needed + o let udev-test.pl run an individual test if you ask it to + o Handle the '!' character that some block devices have + o add a block device with a ! in the name, and a test for this + o fix up 'make release' to use bk to build the export tree + o fix log option code so that it actually works for all udev programs + o finish syncing up with klibc + o sync with latest version of klibc (0.107) + o fix up Makefile dependancies for udev_version.h + +Patrick Mansfield: + o udev add wild card compare for ID + o udev kill extra bus_id compares in match_id + + +Summary of changes from v015 to v016 +============================================ + +<elkropac:students.zcu.cz>: + o get_dev_number() in extras/ide-devfs.sh + +<rrm3:rrm3.org>: + o FAQ udev.rules.devfs + +Greg Kroah-Hartman: + o add udevd and udevsend to the spec file + o make /etc/hotplug.d/default/udev.hotplug symlink point to udevsend now + o add KERNEL_DIR option so that the distros will be happy + o make udevsend binary even smaller + o udevsend now almost compiles with klibc, struct sockaddr_un is only problem now + o fix up logging code so that it can be built without it being enabled + o rework the logging code so that each program logs with the proper name in the syslog + o remove logging.c as it's no longer needed + o kill the last examples that contained the %D option + o remove a __KLIBC__ tests in libsysfs, as klibc now supports getpagesize() + o udevd - remove stupid locking error I wrote + o update to klibc version 0.101, fixing the stdin bug + o fix Makefile typo for USE_LSB install + o allow dbus code to actually build again + +Kay Sievers: + o let udevsend build with klibc + o udevd - config cleanup + o udevd - cleanup and better timeout handling + o fix possible buffer overflow + o udevd - next round of fixes + o udevinfo - missing options for man page + o udev - trivial style cleanup + + +Summary of changes from v014 to v015 +============================================ + +<mbuesch:freenet.de>: + o LFS init script update + +Greg Kroah-Hartman: + o update klibc to version 0.98 + o clean up udevinfo on 'make clean' + o add udevinfo man page to spec file + o remove command line documentation from udev man page + o create initial version of udevinfo man page + o added URL to spec file + o add udevinfo to udev.spec file + o add udevinfo to install target of Makefile + o rip out command line code from udev, now that we have udevinfo + o udevinfo doesn't need to declare main_envp + o move get_pair to udev_config.c because udevinfo doesn't need all of namedev.o + o more makefile cleanups + o move udevinfo into the main build and clean up the main Makefile a bit + o clean up compiler warnings if building using klibc + o make udevd only have one instance running at a time + o new testd.block script for debugging + o udevsnd : clean up message creation logic a bit + o make bk ignore udevd and udevsend binaries + o whitespace cleanups + o remove TODO item about BUS value, as it is now done + o add support for figuring out which device on the sysfs "chain" the rule applies to + +Kay Sievers: + o udevinfo - now a real program :) + o udevd - cleanup and better timeout handling + o udev - next round of udev event order daemon + o fix udevd exec + o udev - udevinfo with device chain walk + o spilt udev into pieces + + +Summary of changes from v013 to v014 +============================================ + +<ananthmg:rediffmail.com>: + o libsysfs update for refresh + namedev.c changes + +<christophe.varoqui:free.fr>: + o udev-013/extras/multipath update + +<flamingice:sourmilk.net>: + o minor patch for devfs rules + +Kay Sievers: + o udev - program to query all device attributes to build a rule + o set default owner/group in db - update + o udev - reverse user query options + o udev - kill %D from udev-test.pl + o add udev logging to info log + o udev - mention format string escape char in man page + +Greg Kroah-Hartman: + o misc code cleanups + o fixup logging.h to handle different logging options properly + o clean up the logging patch a bit to make the option more like the other options + o remove the %D modifier as it is not longer needed + o remove unneeded keyboard rule + o add usb_host and pci_bus to the class blacklist + o added input device rules to udev.rules and udev.rules.devfs + o 013_bk mark + +Hanna V. Linder: + o set default owner/group in db + o small cut n paste error fix + +Patrick Mansfield: + o update udev scsi_id to scsi_id 0.3 + + +Summary of changes from v012 to v013 +============================================ + +<eike-hotplug:sf-tec.de>: + o LSB init script and other stuff + +<elkropac:students.zcu.cz>: + o fix udev directory for Debian init script + +<tiggi:infa.abo.fi>: + o udev 012 old gcc fixup + +Christophe Saout: + o add IGNORE rule type + o small cleanup + +Greg Kroah-Hartman: + o update TODO with some new, small items + o Cset exclude: greg@kroah.com|ChangeSet|20040113010256|48515 + o update the README in a few places + o fix -d typo in the manpage update + o Fix stupid gcc "optimization" of 1 character printk() calls.... Ick + o oops, forgot to fix up the PROGRAM result from ID to RESULT in the config files + o Add alsa device rules and a few other devfs rules + o fix a few stale comments in namedev.c + o convert the default rules files to the new format + o convert the test shell scripts to the config file format + o add bus test for usb-serial bus + o Add some helpful messages if the user uses the older config file format + o added dri rule to the default config file + o added init.d udev script for debian + o add a script that tests the IGNORE rule + o add silly script that names cdrom drives based on the cd in them + o add cdrom rule for ide cdrom + o replace list_for_each with list_for_each_entry, saving a few lines of code + o add a blacklist of class devices we do not want to look at + +Kay Sievers: + o fix klibc with printf() and gcc + o udev - small script optimization + o udev - introduce format escape char + o udev - more CALLOUT is PROGRAM now + o udev - CALLOUT is PROGRAM now + o update documentation for new config file format + o more advanced user query options + o udev - simple debug tweak + o udev - drop all methods :) + o udev - advanced user query options + o udev - Makefile error + o udev - make exec_callout() reusable + o udev - exec status fix for klibc + o fix Silly udev script + + +Summary of changes from v011 to v012 +============================================ + +<azarah:nosferatu.za.org>: + o make symlink work properly if there is already a file in its place + o Fix udev gcc-2.95.4 compat + +<christophe.varoqui:free.fr>: + o extras multipath update + o extras multipath update + +Kay Sievers: + o mention user callable udev + options in man page + o make udev user callable to query the database + o depend on all .h files + o cleanup namedev_parse debug text + o extend exec_program[] + o ide-devfs.sh update + o fix for apply_format() + o check for empty symlink string + o 'ide' missing in bus_files[] + o small trivial cleanup of latest changes + +<mbuesch:freenet.de>: + o introduce signal handler + +<rml:ximian.com>: + o udev spec file update + +Greg Kroah-Hartman: + o minor grammer fixes for the udev_vs_devfs document + o move the dbus config file to etc/dbus-1/system.d/ + o move the config files to etc/udev to clean up main directory a bit + o add Gentoo versions of the rules and permissions files + o if using glibc, link dynamically, as no one like 500Kb udev binaries + o minor change to udev_vs_devfs document + o added udev vs devfs supid document to the tree + o move the signal handling registration to after we have initialized enough stuff + o make ide-devfs.sh executable in the tree + o udev.permissions.debian - forgot the dm nodes + o update the udev.permissions.debian file with new entries + o added udev.init script for the Linux From Scratch project + + + +Summary of changes from v010 to v011 +============================================ + +<mbuesch:freenet.de>: + o proper cleanup on udevdb_init() failure + +<mh:nadir.org>: + o patch udev 009-010 rpm spec file + +<svetljo:gmx.de>: + o fix udev sed Makefile usage + +Greg Kroah-Hartman: + o add documentation about the BUS key being optional for the LABEL rule + o add tests for LABEL rule with a device that has no bus + o Don't require the BUS value for the LABEL rule + o If a LABEL rule has a BUS id, then we must check to see if the device is on a bus + o add documentation about the BUS key being optional for the CALLOUT rule + o If a CALLOUT rule has a BUS id, then we must check to see if the device is on a bus + o Don't require the BUS value for the CALLOUT rule + o add test for callout rule with a device that has no bus + o 010_bk stamp + o added different build options to the rpm udev.spec file + o add pci to the bus_files list + o check for empty line a bit better in the parser + o more init script cleanups, the stop target now calls udev to cleanup instead of just removing the whole /udev directory + o make udev init script run udev in the background to let startup go much faster + o fix long delay for all devices in namedev + + +Summary of changes from v009 to v010 +============================================ + +<ananth:in.ibm.com>: + o change pgsize + +<christophe.varoqui:free.fr>: + o extras multipath update + o extras multipath update + o extras multipath update + o extras multipath update + +Kay Sievers: + o fix udev-test.pl + o small cleanup udev-remove.c + o experimental CALLOUT script for devfs ide node creation with cd, disc, part + o add any valid device + o introduce format char 'k' for kernel-name + o trivial make fixes + o don't overwrite old config on install + o udev-remove.c cleanups + o bug in udev-remove.c + o trivial cleanup parser changes + +<roman.kagan:itep.ru>: + o fix comment and whitespace handling in config files + +Adam Kropelin: + o Allow build with empty EXTRAS + +Daniel E. F. Stekloff: + o libsysfs 0.4.0 patch + o fix scsi_id segfault with udev-009 + o add libsysfs docs + +David T. Hollis: + o mark config files as such in the rpm spec file + +Greg Kroah-Hartman: + o fix complier warning in namedev.c + o add documentation for the new '%k' modifier (kernel name replacement) + o add documentation about the multiple sysfs values that are now allowed for the LABEL rule + o add tests for multi-file LABEL rules + o add ability to have up to 5 SYSFS_ file/value pairs for the LABEL rule + o Just live with a sleep(1) in namedev for now until libsysfs is fixed up + o try to wait until the proper device file shows up in sysfs + o remove unneeded TODO and FIXME entry + o clean up the stand-alone tests to work properly on other people's machines + o add tests to catch whitespace and comment config file parsing errors + + +Summary of changes from v008 to v009 +============================================ + +<christophe.varoqui:free.fr>: + o more extras/multipath changes + o and more extras/multipath updates + o more extras/multipath updates + o yet more extras/multipath + o more extras/multipath updates + o extras/multipath update + +<david:fubar.dk>: + o D-BUS patch for udev-008 + +<eike-hotplug:sf-tec.de>: + o add init.d/udev to "make install" + o add init.d/udev to the spec file + +Kay Sievers: + o don't rely on field order in namedev_parse + o get part of callout return string + o remove '\n' from end of callout return + o man-page mention multiple symlinks + o allow multiple symlinks + o cleanup man & remove symlink comment + o experimental (very simple) SYMLINK creation + o man page beauty + o pattern match for label method + o a bug in linefeed removal + +<rml:ximian.com>: + o remove udev from runlevels on uninstall + o install initscript in udev rpm + +Daniel E. F. Stekloff: + o pre-libsysfs-0.4.0 patch + +Greg Kroah-Hartman: + o signal fixes due to klibc update + o sync klibc with release 0.95 + o add mol permissions to the debian permissions file + o update the FAQ with info about bad modprobe events from the devfs scheme + o some cleanups due to the need for LABEL rules to use "SYSFS_" now + o Add restart target to the etc/init.d/udev script + o tweak the config file generation portion of the Makefile a bit + o change devfs disk name rule from 'disk' to 'disc' + o add vc support to udev.rules.devfs + o added a devfs udev config file from Marco d'Itri <md@Linux.IT> + o set default mode to 0600 to be safer + o Makefile tweaks for the DBUS build + o update the FAQ due to the latest devfs mess on lkml and also due to symlinks now working + o document the different Makefile config options that we have + o change USE_DBUS to DBUS in Makefile, and disable it by default as it's still to hard to build on all systems + o fix formatting of udev_dbus.c to use tabs. Also get it to build properly now + o move all of the DBUS logic into one file and remove all of the #ifdef crud from the main code + +Olaf Hering: + o dump latest klibc into the udev build tree + o use udevdir in udev.conf + +Patrick Mansfield: + o better allow builds of extras programs under udev + o update udev extras/scsi_id to version 0.2 + + +Summary of changes from v007 to v008 +============================================ + +<azarah:nosferatu.za.org>: + o more config file parsing robustness + +<christophe.varoqui:free.fr>: + o udev-007/extras/multipath update + +Arnd Bergmann: + o Build failure - missing linux/limits.h include? + o Add format modifier for devfs like naming + o klibc makefile fixes + +Daniel E. F. Stekloff: + o another patch for path problem + o quick fix for libsysfs bus + o libsysfs changes for sysfsutils 0.3.0 + +Greg Kroah-Hartman: + o fix up some duplicated function compiler warnings in libsysfs + o fix some compiler warnings in the tdb code + o Added Kay's name to the man page + o update the wildcard documentation in the man page to show the new styles supported + o fix permission handling logic + o enable default_mode ability to actually build + o add support for the default_mode variable, as it is documented + o show permissions and groups in the label_test + o remove some items off of the TODO list, as they are now done + o fix up the tests to work without all of the environ variables + o get rid of the majority of the debug environment variables + o Update the man page to show the new config file, it's format, and how to use it + o fix up the tests to support the rules file name change + o add support for a main udev config file, udev.conf + o turn debugging messages off by default + o split out the namedev config parsing logic to namedev_parse.c + o rename namedev's get_attr() to be main namedev_name_device() as that's what it really is + o add devfs like tty rules as an example in the default config file + o operate on the rules in the order they are in the config file (within the rule type) instead of operating on them backwards. + o Cset exclude: dsteklof@us.ibm.com|ChangeSet|20031126173159|56255 + o add test for checking the BUS value + o fix problem where we were not looking at the BUS value + o add scsi and pci bus links in the test sysfs tree + o add test and documentation for new %D devfs format modifier + o changed the default location of the database to /udev/.udev.tdb to be LSB compliant + o get rid of functions in klibc_fixups that are now in klibc + o sync up with the 0.84 version of klibc + o fix udev init.d script to handle all class devices in sysfs + o fix the test.block and test.tty scripts due to their moveing. Also add a test.all script + o 007_bk version change to Makefile + +Kay Sievers: + o pattern matching for namedev + o catch replace device by wildcard + o udev.8 tweak numeric id text + o udev-test.pl add subdir test + o namedev.c strcat tweak + o overall whitespace + debug text conditioning + o udev-test.pl - tweaks + +Martin Hicks: + o Add -nodefaultlibs while compiling against klibc + +Olaf Hering: + o ARCH detection for ppc + +Patrick Mansfield: + o fix udev parallel builds with klibc + + +Summary of changes from v006 to v007 +============================================ + +<md:linux.it>: + o fix segfault in parsing bad udev.permissions file + +Greg Kroah-Hartman: + o update default config file with a CALLOUT rule, and more documentation + o updated the man page with the latest format specifier changes + o added ability to put format specifiers in the CALLOUT program string + o tweak udev-test.pl to report '0' errors if that's what happened + o only build klibc_fixups.c if we are actually using klibc + o add support for string group and string user names in udev.permissions + o add getgrnam and getpwnam to klibc_fixups files + o remove Makefile.klibc + o add udev-test perl script from Kay Sievers <kay.sievers@vrfy.org> which blows away my puny shell scripts + o added debian's version of udev.permissions + o change to 006_bk version + +Kay Sievers: + o format char for CALLOUT output + o more namedev whitespace cleanups + o support arguments in callout exec + o namedev.c - change order of fields in CALLOUT + o namedev.c whitespace + debug text cleanup + o man page with udev.permissions wildcard + +Olaf Hering: + o static klibc udev does not link against crt0.o + +Summary of changes from v005 to v006 +============================================ + +<chris_friesen:sympatico.ca>: + o faster test scripts + +Arnd Bergmann: + o more robust config file parsing in namedev.c + o add bus id modifier + +Daniel E. F. Stekloff: + o patch for libsysfs sysfs directory handling + +Greg Kroah-Hartman: + o add another line to udev.permissions in the proper format + o tweak replace_test + o fix permissions to work properly now + o add real udev.permissions file to test directory + o fix namedev.c to build with older version of gcc + o add dumb test for all of the different modifiers + o update the TODO list with more items that people can easily do + o move the test.block and test.tty scripts to the test/ directory + o add remove actions to the test scripts + o turn DEBUG_PARSER off by default + o add some documentation for the %b modifier to the default config file + o fix make install rule for when the udev symlink is already there + o change release target in makefile + o change debug level on printf values for now + o updated demo config file + o add some documentation of the modifiers to the default config file + o add demo config file + o updated bk ignore list for klibc generated files + o add printf option to label test to verify it works + o fix up printf-like functionality due to previous changes + o get the major/minor number before we name the device + o add scsi_id "extra" program from Patrick Mansfield <patmans@us.ibm.com> + o Add multipath "extra" program from Christophe Varoqui, <christophe.varoqui@free.fr> + o trailing whitespace cleanups + o splig LABEL and NUMBER into separate functions + o add TOPO regression test + o move TOPOLOGY rule to it's own function + o fix bug where NUMBER and TOPOLOGY would not work for partitions + o clean up the way we find the sysdevice for a block device for namedev + o updated label test script (tests for partitions now.) + o split REPLACE and CALLOUT into separate functions + o add debug line for REPLACE call + o add replace test + o add more sysfs test tree files + o change UDEV_SYSFS_PATH environment variable due to libsysfs change + o fix bug in klibc's isspace function + o fix udev-add.c to build properly with older versions of gcc + o add prototype for ftruncate to klibc + o Remove a few items from the TODO list that are already done + o version number to 005_bk + o pull some klibc stuff into the make Makefile to try to stay in sync + o klibc build fixes + +Kay Sievers: + o apply permissions.conf support for wildcard and default name + o man page with included placeholder list + o implement printf-like placeholder support for NAME + o more manpage tweaks + o add support for subdirs + o add uid/gid to nodes + +Olaf Hering: + o DESTDIR for udev + +Paul Mundt: + o Fixup path for kernel includes when building with klibc + +Robert Love: + o udev init script + + +Summary of changes from v004 to v005 +============================================ + +<kay:vrfy.org>: + o namedev.c comments + debug patch + o man page update + +Greg Kroah-Hartman: + o ignore the klibc/linux symlink + o add klibc linux symlink info to the README + o get 'make release' to work properly again + o added README info for how to build using klibc + o turn off debugging if we are building with klibc + o turn off debugging in namedev + o added vsyslog support to klibc + o add ftruncate to klibc + o klibc specific tweaks + o libsysfs does not need mntent.h in it's header file + o udev build tweaks to tdb's spinlock code + o klibc makefile changes + o build tdb and libsysfs from the same makefile as udev + o udev-add build cleanups for other libc versions + o tweak tdb to build within udev better + o make libsysfs spit debug messages to the same place as the rest of udev + o make libsysfs build cleanly + o updated bk ignore list + o added klibc version 0.82 (cvs tree) to the udev tree + o makefile fix for now + o Merge greg@bucket:/home/greg/src/udev into kroah.com:/home/greg/src/udev + o hm, makefile bug with so many files... will fix later + o regression tests starting to be added + o fix LABEL bug for device files (not class files.) + o more warning flags to the build + o got rid of struct device_attr + o rename namedev.permissions and namedev.config to udev.permissions and udev.config + o fix dbg line in namedev.c + o more overrides of config info with env variables if in test mode + o Fix bug causing udev to sleep forever waiting for dev file to show up + o change version to 004_bk + o make config files, sysfs root, and udev root configurable from config variables + +Robert Love: + o udev: sleep_for_dev() bits + o udev: another canidate for static + + +Summary of changes from v003 to v004 +============================================ + +Daniel E. F. Stekloff: + o new version of libsysfs patch + +Greg Kroah-Hartman: + o 004 release + o major database cleanups + o Changed test.block and test.tty to take ACTION from the command line + o don't sleep if 'dev' file is already present on device add + o fix comment about how the "dev" file is made up + o more database work. Now we only store the info we really need right now + o add BUS= bug to TODO list so it will not get forgotten + o spec file changes + o test.block changes + o ok, rpm likes the "_" character instead of "-" better + o change the version to 003-bk to keep things sane with people using the bk tree + o got "remove of named devices" working + o fix segfaults when dealing with partitions + +Kay Sievers: + o man file update + o man page update + +Robert Love: + o udev: mode should be mode_t + o udev: trivial trivialities + o udev: cool test scripts again + o udev spec file symlink support + o udev: cool test scripts + o udev spec file bits + + +Summary of changes from v0.2 to v003 +============================================ + +Daniel E. F. Stekloff: + o udevdb patch + o udevdb prototype + +Greg Kroah-Hartman: + o update the spec file for the new version and install process + o fix makefile release rule to not drop tdb.h file + o Add FAQ for udev + o removed AUTHORS and INSTALL files as they were pretty pointless + o copyright updates + o Add AUTHORS and INSTALL files + o TODO updates + o Updatd the README + o updated the TODO list + o add udev man page (basically just a place holder for now.) + o added uninstall support + o added install target for makefile so people don't have to do it by hand anymore + o add version to debug log on startup + o tell the user what mknod() we are trying to do + o add dbg_parse() to cut down on parse file debugging statements + o put config files and database in /etc/udev by default + o add ols 2003 udev paper to docs/ + o clean up some debugging stuff in namedev.c + o do not build the tdb binary programs, only the objects + o merge tdb into the build process + o Added tdb code from latest cvs version in the samba tree + o added my name to the .spec file + o minor cleanups + o cleanup the mknod code a bit + o remove mknod callout + o handle new major:minor format of dev files that showed up in 2.6.0-test2-bk3 or so + o oops, everything was getting created as 000 mode, try to fix this up, but fail... + o more test stuff + +Olaf Hering: + o print udev pid + +Patrick Mansfield: + o add callout config type to udev + +Paul Mundt: + o Fix TDB cross compilation + o udev spec file + o udev/libsysfs cross compile fixes + + +Summary of changes from v0.1 to v0.2 +============================================ + +Greg Kroah-Hartman: + o more test stuff + o removed unneeded stuff from udev.h + o added 0.2 change log info + o start working on label support, and fix some segfaults for block devices + o test config file changes + o add NUMBER support (basically same logic as TOPOLOGY, perhaps we should + merge this...) + o added topology support + o got REPLACE to work properly + o make struct config_device contain a struct device_attr instead of + duplicating the mess + o block test + o split the tests up into different files + o split udev main logic into udev-add and udev-remove + o Clean up the namedev interface a bit, making the code smaller + o bk: update ignore list + o update the tests to handle block devices too + o add initial libsysfs support + o added libsysfs to the build + o added libsysfs code from sysutils-0.1.1-071803 release + o namedev config files are fully parsed + o more permission tests + o make log_message spit out warnings so I don't have to spend forever + chasing down stupid bugs that aren't there... + o added klibc makefile + o Initial namedev parsing of config files + o sleep for 2 seconds to give the kernel a chance to actually create the + files we need + o pick a better default UDEV_ROOT + o fix up the test to actually work + o added more documentation in README and TODO files + + +Summary of changes up to v0.1 +============================================ + +Greg Kroah-Hartman: + o added more documentation in README and TODO files + o updated the documentation + o cleaned up the makefile a bit + o remove now works! + o restructure code to be able to actually get remove_node() to work + o Creating nodes actually works + o added stupid test script for debugging + o added initial documentation and gpl license + o enabled debugging + o updated ignore list + o added initial files + o fixed up config + o Initial repository create + o BitKeeper file /home/greg/src/udev/udev/ChangeSet + diff --git a/src/udev/INSTALL b/src/udev/INSTALL new file mode 100644 index 000000000..0a34e77df --- /dev/null +++ b/src/udev/INSTALL @@ -0,0 +1,44 @@ +The options used usually look like: + %configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --bindir=/usr/bin \ + --libdir=/usr/lib64 \ + --libexecdir=/usr/lib \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --with-selinux + +The options used in a RPM spec file look like: + %configure \ + --prefix=%{_prefix} \ + --sysconfdir=%{_sysconfdir} \ + --bindir=%{_bindir} \ + --libdir=%{_libdir} \ + --libexecdir=%{_prefix}/lib \ + --with-systemdsystemunitdir=%{_prefix}/lib/systemd/system \ + --with-selinux + +The options to install udev in the rootfs instead of /usr, +and udevadm in /sbin: + --prefix=%{_prefix} \ + --with-rootprefix= \ + --sysconfdir=%{_sysconfdir} \ + --bindir=/sbin \ + --libdir=%{_libdir} \ + --with-rootlibdir=/lib64 \ + --libexecdir=/lib \ + --with-systemdsystemunitdir=/lib/systemd/system \ + --with-selinux + +Some tools expect udevadm in 'sbin'. A symlink to udevadm in 'bin' +needs to be manually created if needed. + +The defined location for scripts and binaries which are called +from rules is (/usr)/lib/udev/ on all systems and architectures. Any +other location will break other packages, who rightfully expect +the (/usr)/lib/udev/ directory, to install their rule helper and udev +rule files. + +Default udev rules and persistent device naming rules may be required +by other software that depends on the data udev collects from the +devices. diff --git a/src/udev/Makefile.am b/src/udev/Makefile.am new file mode 100644 index 000000000..1c7f86b08 --- /dev/null +++ b/src/udev/Makefile.am @@ -0,0 +1,712 @@ +# Copyright (C) 2008-2012 Kay Sievers <kay.sievers@vrfy.org> +# Copyright (C) 2009 Diego Elio 'Flameeyes' Pettenò <flameeyes@gmail.com> + +SUBDIRS = . + +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} + +AM_MAKEFLAGS = --no-print-directory + +LIBUDEV_CURRENT=13 +LIBUDEV_REVISION=2 +LIBUDEV_AGE=13 + +LIBGUDEV_CURRENT=1 +LIBGUDEV_REVISION=1 +LIBGUDEV_AGE=1 + +AM_CPPFLAGS = \ + -include $(top_builddir)/config.h \ + -I$(top_srcdir)/src \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ + -DPKGLIBEXECDIR=\""$(libexecdir)/udev"\" + +AM_CFLAGS = \ + ${my_CFLAGS} \ + -fvisibility=hidden \ + -ffunction-sections \ + -fdata-sections + +AM_LDFLAGS = \ + -Wl,--gc-sections \ + -Wl,--as-needed + +DISTCHECK_CONFIGURE_FLAGS = \ + --enable-debug \ + --enable-rule_generator \ + --enable-floppy \ + --with-selinux \ + --enable-gtk-doc \ + --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir) + +BUILT_SOURCES = +EXTRA_DIST = +CLEANFILES = +INSTALL_EXEC_HOOKS = +INSTALL_DATA_HOOKS = +UNINSTALL_EXEC_HOOKS = +DISTCHECK_HOOKS = +DISTCLEAN_LOCAL_HOOKS = + +udevhomedir = $(libexecdir)/udev +udevhome_SCRIPTS = +dist_udevhome_SCRIPTS = +dist_udevhome_DATA = +dist_man_MANS = + +SED_PROCESS = \ + $(AM_V_GEN)$(MKDIR_P) $(dir $@) && $(SED) \ + -e 's,@VERSION\@,$(VERSION),g' \ + -e 's,@prefix\@,$(prefix),g' \ + -e 's,@rootprefix\@,$(rootprefix),g' \ + -e 's,@exec_prefix\@,$(exec_prefix),g' \ + -e 's,@libdir\@,$(libdir),g' \ + -e 's,@includedir\@,$(includedir),g' \ + -e 's,@bindir\@,$(bindir),g' \ + -e 's,@pkglibexecdir\@,$(libexecdir)/udev,g' \ + < $< > $@ || rm $@ + +%.pc: %.pc.in Makefile + $(SED_PROCESS) + +%.rules: %.rules.in Makefile + $(SED_PROCESS) + +%.service: %.service.in Makefile + $(SED_PROCESS) + +%.sh: %.sh.in Makefile + $(SED_PROCESS) + $(AM_V_GEN)chmod +x $@ + +%.pl: %.pl.in Makefile + $(SED_PROCESS) + $(AM_V_GEN)chmod +x $@ + +# ------------------------------------------------------------------------------ +SUBDIRS += src/docs + +include_HEADERS = src/libudev.h +lib_LTLIBRARIES = libudev.la +noinst_LTLIBRARIES = libudev-private.la + +libudev_la_SOURCES =\ + src/libudev-private.h \ + src/libudev.c \ + src/libudev-list.c \ + src/libudev-util.c \ + src/libudev-device.c \ + src/libudev-enumerate.c \ + src/libudev-monitor.c \ + src/libudev-queue.c + +libudev_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + -version-info $(LIBUDEV_CURRENT):$(LIBUDEV_REVISION):$(LIBUDEV_AGE) + +libudev_private_la_SOURCES =\ + $(libudev_la_SOURCES) \ + src/libudev-util-private.c \ + src/libudev-device-private.c \ + src/libudev-queue-private.c + +if WITH_SELINUX +libudev_private_la_SOURCES += src/libudev-selinux-private.c +libudev_private_la_LIBADD = $(SELINUX_LIBS) +endif + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = src/libudev.pc +EXTRA_DIST += src/libudev.pc.in +CLEANFILES += src/libudev.pc + +EXTRA_DIST += src/COPYING +# move lib from $(libdir) to $(rootlib_execdir) and update devel link, if needed +libudev-install-move-hook: + if test "$(libdir)" != "$(rootlib_execdir)"; then \ + mkdir -p $(DESTDIR)$(rootlib_execdir) && \ + so_img_name=$$(readlink $(DESTDIR)$(libdir)/libudev.so) && \ + so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \ + ln -sf $$so_img_rel_target_prefix$(rootlib_execdir)/$$so_img_name $(DESTDIR)$(libdir)/libudev.so && \ + mv $(DESTDIR)$(libdir)/libudev.so.* $(DESTDIR)$(rootlib_execdir); \ + fi + +libudev-uninstall-move-hook: + rm -f $(DESTDIR)$(rootlib_execdir)/libudev.so* + +INSTALL_EXEC_HOOKS += libudev-install-move-hook +UNINSTALL_EXEC_HOOKS += libudev-uninstall-move-hook + +# ------------------------------------------------------------------------------ +udev-confdirs: + -mkdir -p $(DESTDIR)$(sysconfdir)/udev/rules.d + -mkdir -p $(DESTDIR)$(libexecdir)/udev/devices + +INSTALL_DATA_HOOKS += udev-confdirs + +udevrulesdir = $(libexecdir)/udev/rules.d +dist_udevrules_DATA = \ + rules/42-usb-hid-pm.rules \ + rules/50-udev-default.rules \ + rules/60-persistent-storage-tape.rules \ + rules/60-persistent-serial.rules \ + rules/60-persistent-input.rules \ + rules/60-persistent-alsa.rules \ + rules/60-persistent-storage.rules \ + rules/75-net-description.rules \ + rules/75-tty-description.rules \ + rules/78-sound-card.rules \ + rules/80-drivers.rules \ + rules/95-udev-late.rules + +udevconfdir = $(sysconfdir)/udev +dist_udevconf_DATA = src/udev.conf + +sharepkgconfigdir = $(datadir)/pkgconfig +sharepkgconfig_DATA = src/udev.pc +EXTRA_DIST += src/udev.pc.in +CLEANFILES += src/udev.pc + +if WITH_SYSTEMD +dist_systemdsystemunit_DATA = \ + src/udev-control.socket \ + src/udev-kernel.socket + +systemdsystemunit_DATA = \ + src/udev.service \ + src/udev-trigger.service \ + src/udev-settle.service + +EXTRA_DIST += \ + src/udev.service.in \ + src/udev-trigger.service.in \ + src/udev-settle.service.in + +CLEANFILES += \ + src/udev.service \ + src/udev-trigger.service \ + src/udev-settle.service + +systemd-install-hook: + mkdir -p $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants + ln -sf ../udev-control.socket $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants/udev-control.socket + ln -sf ../udev-kernel.socket $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants/udev-kernel.socket + mkdir -p $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants + ln -sf ../udev.service $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants/udev.service + ln -sf ../udev-trigger.service $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants/udev-trigger.service + +INSTALL_DATA_HOOKS += systemd-install-hook +endif + +bin_PROGRAMS = \ + udevadm + +pkglibexec_PROGRAMS = \ + udevd + +udev_common_sources = \ + src/udev.h \ + src/udev-event.c \ + src/udev-watch.c \ + src/udev-node.c \ + src/udev-rules.c \ + src/udev-ctrl.c \ + src/udev-builtin.c \ + src/udev-builtin-blkid.c \ + src/udev-builtin-firmware.c \ + src/udev-builtin-hwdb.c \ + src/udev-builtin-input_id.c \ + src/udev-builtin-kmod.c \ + src/udev-builtin-path_id.c \ + src/udev-builtin-usb_id.c + +udev_common_CFLAGS = \ + $(BLKID_CFLAGS) \ + $(KMOD_CFLAGS) + +udev_common_LDADD = \ + libudev-private.la \ + $(BLKID_LIBS) \ + $(KMOD_LIBS) + +udev_common_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -DFIRMWARE_PATH="$(FIRMWARE_PATH)" \ + -DUSB_DATABASE=\"$(USB_DATABASE)\" -DPCI_DATABASE=\"$(PCI_DATABASE)\" + +udevd_SOURCES = \ + $(udev_common_sources) \ + src/udevd.c \ + src/sd-daemon.h \ + src/sd-daemon.c +udevd_CFLAGS = $(udev_common_CFLAGS) +udevd_LDADD = $(udev_common_LDADD) +udevd_CPPFLAGS = $(udev_common_CPPFLAGS) + +udevadm_SOURCES = \ + $(udev_common_sources) \ + src/udevadm.c \ + src/udevadm-info.c \ + src/udevadm-control.c \ + src/udevadm-monitor.c \ + src/udevadm-settle.c \ + src/udevadm-trigger.c \ + src/udevadm-test.c \ + src/udevadm-test-builtin.c +udevadm_CFLAGS = $(udev_common_CFLAGS) +udevadm_LDADD = $(udev_common_LDADD) +udevadm_CPPFLAGS = $(udev_common_CPPFLAGS) + +# ------------------------------------------------------------------------------ +if ENABLE_MANPAGES +dist_man_MANS += \ + src/udev.7 \ + src/udevadm.8 \ + src/udevd.8 +endif + +EXTRA_DIST += \ + src/udev.xml \ + src/udevadm.xml \ + src/udevd.xml + +if HAVE_XSLTPROC +dist_noinst_DATA = \ + src/udev.html \ + src/udevadm.html \ + src/udevd.html + +src/%.7 src/%.8 : src/%.xml + $(AM_V_GEN)$(XSLTPROC) -o $@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< + +src/%.html : src/%.xml + $(AM_V_GEN)$(XSLTPROC) -o $@ -nonet http://docbook.sourceforge.net/release/xsl/current/xhtml-1_1/docbook.xsl $< +endif + +# ------------------------------------------------------------------------------ +TESTS = \ + test/udev-test.pl \ + test/rules-test.sh + +check_PROGRAMS = \ + test-libudev \ + test-udev + +test_libudev_SOURCES = src/test-libudev.c +test_libudev_LDADD = libudev.la + +test_udev_SOURCES = \ + $(udev_common_sources) \ + src/test-udev.c +test_udev_CFLAGS = $(udev_common_CFLAGS) +test_udev_LDADD = $(udev_common_LDADD) +test_udev_CPPFLAGS = $(udev_common_CPPFLAGS) +test_udev_DEPENDENCIES = test/sys + +# packed sysfs test tree +test/sys: + $(AM_V_GEN)mkdir -p test && tar -C test/ -xJf $(top_srcdir)/test/sys.tar.xz + +test-sys-distclean: + -rm -rf test/sys +DISTCLEAN_LOCAL_HOOKS += test-sys-distclean + +EXTRA_DIST += test/sys.tar.xz + +# ------------------------------------------------------------------------------ +ata_id_SOURCES = src/ata_id/ata_id.c +ata_id_LDADD = libudev-private.la +pkglibexec_PROGRAMS += ata_id + +# ------------------------------------------------------------------------------ +cdrom_id_SOURCES = src/cdrom_id/cdrom_id.c +cdrom_id_LDADD = libudev-private.la +pkglibexec_PROGRAMS += cdrom_id +dist_udevrules_DATA += src/cdrom_id/60-cdrom_id.rules + +# ------------------------------------------------------------------------------ +collect_SOURCES = src/collect/collect.c +collect_LDADD = libudev-private.la +pkglibexec_PROGRAMS += collect + +# ------------------------------------------------------------------------------ +scsi_id_SOURCES =\ + src/scsi_id/scsi_id.c \ + src/scsi_id/scsi_serial.c \ + src/scsi_id/scsi.h \ + src/scsi_id/scsi_id.h +scsi_id_LDADD = libudev-private.la +pkglibexec_PROGRAMS += scsi_id +dist_man_MANS += src/scsi_id/scsi_id.8 +EXTRA_DIST += src/scsi_id/README + +# ------------------------------------------------------------------------------ +v4l_id_SOURCES = src/v4l_id/v4l_id.c +v4l_id_LDADD = libudev-private.la +pkglibexec_PROGRAMS += v4l_id +dist_udevrules_DATA += src/v4l_id/60-persistent-v4l.rules + +# ------------------------------------------------------------------------------ +accelerometer_SOURCES = src/accelerometer/accelerometer.c +accelerometer_LDADD = libudev-private.la -lm +pkglibexec_PROGRAMS += accelerometer +dist_udevrules_DATA += src/accelerometer/61-accelerometer.rules + +# ------------------------------------------------------------------------------ +if ENABLE_GUDEV +SUBDIRS += src/gudev/docs + +libgudev_includedir=$(includedir)/gudev-1.0/gudev +libgudev_include_HEADERS = \ + src/gudev/gudev.h \ + src/gudev/gudevenums.h \ + src/gudev/gudevenumtypes.h \ + src/gudev/gudevtypes.h \ + src/gudev/gudevclient.h \ + src/gudev/gudevdevice.h \ + src/gudev/gudevenumerator.h + +lib_LTLIBRARIES += libgudev-1.0.la + +pkgconfig_DATA += src/gudev/gudev-1.0.pc +EXTRA_DIST += src/gudev/gudev-1.0.pc.in +CLEANFILES += src/gudev/gudev-1.0.pc + +libgudev_1_0_la_SOURCES = \ + src/gudev/gudevenums.h \ + src/gudev/gudevenumtypes.h \ + src/gudev/gudevenumtypes.h\ + src/gudev/gudevtypes.h \ + src/gudev/gudevclient.h \ + src/gudev/gudevclient.c \ + src/gudev/gudevdevice.h \ + src/gudev/gudevdevice.c \ + src/gudev/gudevenumerator.h \ + src/gudev/gudevenumerator.c \ + src/gudev/gudevprivate.h + +nodist_libgudev_1_0_la_SOURCES = \ + src/gudev/gudevmarshal.h \ + src/gudev/gudevmarshal.c \ + src/gudev/gudevenumtypes.h \ + src/gudev/gudevenumtypes.c +BUILT_SOURCES += $(nodist_libgudev_1_0_la_SOURCES) + +libgudev_1_0_la_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -I$(top_builddir)/src\ + -I$(top_srcdir)/src\ + -I$(top_builddir)/src/gudev \ + -I$(top_srcdir)/src/gudev \ + -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT \ + -D_GUDEV_COMPILATION \ + -DG_LOG_DOMAIN=\"GUdev\" + +libgudev_1_0_la_CFLAGS = \ + -fvisibility=default \ + $(GLIB_CFLAGS) + +libgudev_1_0_la_LIBADD = libudev.la $(GLIB_LIBS) + +libgudev_1_0_la_LDFLAGS = \ + -version-info $(LIBGUDEV_CURRENT):$(LIBGUDEV_REVISION):$(LIBGUDEV_AGE) \ + -export-dynamic -no-undefined \ + -export-symbols-regex '^g_udev_.*' + +EXTRA_DIST += \ + src/gudev/COPYING \ + src/gudev/gudevmarshal.list \ + src/gudev/gudevenumtypes.h.template \ + src/gudev/gudevenumtypes.c.template \ + src/gudev/gjs-example.js \ + src/gudev/seed-example-enum.js \ + src/gudev/seed-example.js + +src/gudev/gudevmarshal.h: src/gudev/gudevmarshal.list + $(AM_V_GEN)glib-genmarshal $< --prefix=g_udev_marshal --header > $@ + +src/gudev/gudevmarshal.c: src/gudev/gudevmarshal.list + $(AM_V_GEN)echo "#include \"gudevmarshal.h\"" > $@ && \ + glib-genmarshal $< --prefix=g_udev_marshal --body >> $@ + +src/gudev/gudevenumtypes.h: src/gudev/gudevenumtypes.h.template src/gudev/gudevenums.h + $(AM_V_GEN)glib-mkenums --template $^ > \ + $@.tmp && mv $@.tmp $@ + +src/gudev/gudevenumtypes.c: src/gudev/gudevenumtypes.c.template src/gudev/gudevenums.h + $(AM_V_GEN)glib-mkenums --template $^ > \ + $@.tmp && mv $@.tmp $@ + +if ENABLE_INTROSPECTION +src/gudev/GUdev-1.0.gir: libgudev-1.0.la $(G_IR_SCANNER) + $(AM_V_GEN)$(G_IR_SCANNER) -v \ + --warn-all \ + --namespace GUdev \ + --nsversion=1.0 \ + --include=GObject-2.0 \ + --library=gudev-1.0 \ + --library-path=$(top_builddir)/src \ + --library-path=$(top_builddir)/src/gudev \ + --output $@ \ + --pkg=glib-2.0 \ + --pkg=gobject-2.0 \ + --pkg-export=gudev-1.0 \ + --c-include=gudev/gudev.h \ + -I$(top_srcdir)/src/\ + -I$(top_builddir)/src/\ + -D_GUDEV_COMPILATION \ + -D_GUDEV_WORK_AROUND_DEV_T_BUG \ + $(top_srcdir)/src/gudev/gudev.h \ + $(top_srcdir)/src/gudev/gudevtypes.h \ + $(top_srcdir)/src/gudev/gudevenums.h \ + $(or $(wildcard $(top_builddir)/src/gudev/gudevenumtypes.h),$(top_srcdir)/src/gudev/gudevenumtypes.h) \ + $(top_srcdir)/src/gudev/gudevclient.h \ + $(top_srcdir)/src/gudev/gudevdevice.h \ + $(top_srcdir)/src/gudev/gudevenumerator.h \ + $(top_srcdir)/src/gudev/gudevclient.c \ + $(top_srcdir)/src/gudev/gudevdevice.c \ + $(top_srcdir)/src/gudev/gudevenumerator.c + +src/gudev/GUdev-1.0.typelib: src/gudev/GUdev-1.0.gir $(G_IR_COMPILER) + $(AM_V_GEN)g-ir-compiler $< -o $@ + +girdir = $(GIRDIR) +gir_DATA = src/gudev/GUdev-1.0.gir + +typelibsdir = $(GIRTYPELIBDIR) +typelibs_DATA = src/gudev/GUdev-1.0.typelib + +CLEANFILES += $(gir_DATA) $(typelibs_DATA) +endif # ENABLE_INTROSPECTION + +# move lib from $(libdir) to $(rootlib_execdir) and update devel link, if needed +libgudev-install-move-hook: + if test "$(libdir)" != "$(rootlib_execdir)"; then \ + mkdir -p $(DESTDIR)$(rootlib_execdir) && \ + so_img_name=$$(readlink $(DESTDIR)$(libdir)/libgudev-1.0.so) && \ + so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \ + ln -sf $$so_img_rel_target_prefix$(rootlib_execdir)/$$so_img_name $(DESTDIR)$(libdir)/libgudev-1.0.so && \ + mv $(DESTDIR)$(libdir)/libgudev-1.0.so.* $(DESTDIR)$(rootlib_execdir); \ + fi + +libgudev-uninstall-move-hook: + rm -f $(DESTDIR)$(rootlib_execdir)/libgudev-1.0.so* + +INSTALL_EXEC_HOOKS += libgudev-install-move-hook +UNINSTALL_EXEC_HOOKS += libgudev-uninstall-move-hook +endif + +# ------------------------------------------------------------------------------ +if ENABLE_KEYMAP +keymap_SOURCES = src/keymap/keymap.c +keymap_CPPFLAGS = $(AM_CPPFLAGS) -I src/keymap +nodist_keymap_SOURCES = \ + src/keymap/keys-from-name.h \ + src/keymap/keys-to-name.h +BUILT_SOURCES += $(nodist_keymap_SOURCES) + +pkglibexec_PROGRAMS += keymap +dist_doc_DATA = src/keymap/README.keymap.txt + +dist_udevrules_DATA += \ + src/keymap/95-keymap.rules \ + src/keymap/95-keyboard-force-release.rules + +dist_udevhome_SCRIPTS += src/keymap/findkeyboards +udevhome_SCRIPTS += src/keymap/keyboard-force-release.sh + +EXTRA_DIST += \ + src/keymap/check-keymaps.sh \ + src/keymap/keyboard-force-release.sh.in + +CLEANFILES += \ + src/keymap/keys.txt \ + src/keymap/keys-from-name.gperf \ + src/keymap/keyboard-force-release.sh + +udevkeymapdir = $(libexecdir)/udev/keymaps +dist_udevkeymap_DATA = \ + src/keymap/keymaps/acer \ + src/keymap/keymaps/acer-aspire_5720 \ + src/keymap/keymaps/acer-aspire_8930 \ + src/keymap/keymaps/acer-aspire_5920g \ + src/keymap/keymaps/acer-aspire_6920 \ + src/keymap/keymaps/acer-travelmate_c300 \ + src/keymap/keymaps/asus \ + src/keymap/keymaps/compaq-e_evo \ + src/keymap/keymaps/dell \ + src/keymap/keymaps/dell-latitude-xt2 \ + src/keymap/keymaps/everex-xt5000 \ + src/keymap/keymaps/fujitsu-amilo_li_2732 \ + src/keymap/keymaps/fujitsu-amilo_pa_2548 \ + src/keymap/keymaps/fujitsu-amilo_pro_edition_v3505 \ + src/keymap/keymaps/fujitsu-amilo_pro_v3205 \ + src/keymap/keymaps/fujitsu-amilo_si_1520 \ + src/keymap/keymaps/fujitsu-esprimo_mobile_v5 \ + src/keymap/keymaps/fujitsu-esprimo_mobile_v6 \ + src/keymap/keymaps/genius-slimstar-320 \ + src/keymap/keymaps/hewlett-packard \ + src/keymap/keymaps/hewlett-packard-2510p_2530p \ + src/keymap/keymaps/hewlett-packard-compaq_elitebook \ + src/keymap/keymaps/hewlett-packard-pavilion \ + src/keymap/keymaps/hewlett-packard-presario-2100 \ + src/keymap/keymaps/hewlett-packard-tablet \ + src/keymap/keymaps/hewlett-packard-tx2 \ + src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint \ + src/keymap/keymaps/inventec-symphony_6.0_7.0 \ + src/keymap/keymaps/lenovo-3000 \ + src/keymap/keymaps/lenovo-ideapad \ + src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint \ + src/keymap/keymaps/lenovo-thinkpad_x6_tablet \ + src/keymap/keymaps/lenovo-thinkpad_x200_tablet \ + src/keymap/keymaps/lg-x110 \ + src/keymap/keymaps/logitech-wave \ + src/keymap/keymaps/logitech-wave-cordless \ + src/keymap/keymaps/logitech-wave-pro-cordless \ + src/keymap/keymaps/maxdata-pro_7000 \ + src/keymap/keymaps/medion-fid2060 \ + src/keymap/keymaps/medionnb-a555 \ + src/keymap/keymaps/micro-star \ + src/keymap/keymaps/module-asus-w3j \ + src/keymap/keymaps/module-ibm \ + src/keymap/keymaps/module-lenovo \ + src/keymap/keymaps/module-sony \ + src/keymap/keymaps/module-sony-old \ + src/keymap/keymaps/module-sony-vgn \ + src/keymap/keymaps/olpc-xo \ + src/keymap/keymaps/onkyo \ + src/keymap/keymaps/oqo-model2 \ + src/keymap/keymaps/samsung-other \ + src/keymap/keymaps/samsung-90x3a \ + src/keymap/keymaps/samsung-sq1us \ + src/keymap/keymaps/samsung-sx20s \ + src/keymap/keymaps/toshiba-satellite_a100 \ + src/keymap/keymaps/toshiba-satellite_a110 \ + src/keymap/keymaps/toshiba-satellite_m30x \ + src/keymap/keymaps/zepto-znote + +udevkeymapforcereldir = $(libexecdir)/udev/keymaps/force-release +dist_udevkeymapforcerel_DATA = \ + src/keymap/force-release-maps/dell-touchpad \ + src/keymap/force-release-maps/hp-other \ + src/keymap/force-release-maps/samsung-other \ + src/keymap/force-release-maps/samsung-90x3a \ + src/keymap/force-release-maps/common-volume-keys + +src/keymap/keys.txt: $(INCLUDE_PREFIX)/linux/input.h + $(AM_V_at)mkdir -p src/keymap + $(AM_V_GEN)$(AWK) '/^#define.*KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' < $< | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@ + +src/keymap/keys-from-name.gperf: src/keymap/keys.txt + $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print $$1 ", " $$1 }' < $< > $@ + +src/keymap/keys-from-name.h: src/keymap/keys-from-name.gperf Makefile + $(AM_V_GEN)$(GPERF) -L ANSI-C -t --ignore-case -N lookup_key -H hash_key_name -p -C < $< > $@ + +src/keymap/keys-to-name.h: src/keymap/keys.txt Makefile + $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@ + +keymaps-distcheck-hook: src/keymap/keys.txt + $(top_srcdir)/src/keymap/check-keymaps.sh $(top_srcdir) $^ +DISTCHECK_HOOKS += keymaps-distcheck-hook +endif + +if ENABLE_MTD_PROBE +# ------------------------------------------------------------------------------ +mtd_probe_SOURCES = \ + src/mtd_probe/mtd_probe.c \ + src/mtd_probe/mtd_probe.h \ + src/mtd_probe/probe_smartmedia.c +mtd_probe_CPPFLAGS = $(AM_CPPFLAGS) +dist_udevrules_DATA += src/mtd_probe/75-probe_mtd.rules +pkglibexec_PROGRAMS += mtd_probe +endif + +# ------------------------------------------------------------------------------ +if ENABLE_RULE_GENERATOR +dist_udevhome_SCRIPTS += \ + src/rule_generator/write_cd_rules \ + src/rule_generator/write_net_rules + +dist_udevhome_DATA += \ + src/rule_generator/rule_generator.functions + +dist_udevrules_DATA += \ + src/rule_generator/75-cd-aliases-generator.rules \ + src/rule_generator/75-persistent-net-generator.rules +endif + +# ------------------------------------------------------------------------------ +if ENABLE_FLOPPY +create_floppy_devices_SOURCES = src/floppy/create_floppy_devices.c +create_floppy_devices_LDADD = libudev-private.la +pkglibexec_PROGRAMS += create_floppy_devices +dist_udevrules_DATA += src/floppy/60-floppy.rules +endif + +# ------------------------------------------------------------------------------ +clean-local: + rm -rf udev-test-install + +distclean-local: + rm -rf autom4te.cache + +EXTRA_DIST += \ + $(TESTS) \ + test/rule-syntax-check.py + +CLEANFILES += \ + $(BUILT_SOURCES) + +install-exec-hook: $(INSTALL_EXEC_HOOKS) + +install-data-hook: $(INSTALL_DATA_HOOKS) + +uninstall-hook: $(UNINSTALL_EXEC_HOOKS) + +distcheck-hook: $(DISTCHECK_HOOKS) + +distclean-local: $(DISTCLEAN_LOCAL_HOOKS) + +# ------------------------------------------------------------------------------ +PREVIOUS_VERSION = `expr $(VERSION) - 1` +changelog: + @ head -1 ChangeLog | grep -q "to v$(PREVIOUS_VERSION)" + @ mv ChangeLog ChangeLog.tmp + @ echo "Summary of changes from v$(PREVIOUS_VERSION) to v$(VERSION)" >> ChangeLog + @ echo "============================================" >> ChangeLog + @ echo >> ChangeLog + @ git log --pretty=short $(PREVIOUS_VERSION)..HEAD | git shortlog >> ChangeLog + @ echo >> ChangeLog + @ cat ChangeLog + @ cat ChangeLog.tmp >> ChangeLog + @ rm ChangeLog.tmp + +test-install: + rm -rf $(PWD)/udev-test-install/ + make DESTDIR=$(PWD)/udev-test-install install + tree $(PWD)/udev-test-install/ + +git-release: + head -1 ChangeLog | grep -q "to v$(VERSION)" + head -1 NEWS | grep -q "udev $(VERSION)" + git commit -a -m "release $(VERSION)" + git tag -m "udev $(VERSION)" -s $(VERSION) + git gc --prune=0 + +git-sync: + git push + git push --tags + +tar-sync: + rm -f udev-$(VERSION).tar.sign + xz -d -c udev-$(VERSION).tar.xz | gpg --armor --detach-sign --output udev-$(VERSION).tar.sign + kup put udev-$(VERSION).tar.xz udev-$(VERSION).tar.sign /pub/linux/utils/kernel/hotplug/ + +doc-sync: + for i in src/*.html; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done + for i in src/*.html; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/udev/; done + for i in src/docs/html/*.{html,css,png}; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done + for i in src/docs/html/*.{html,css,png}; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/libudev/; done + for i in src/gudev/docs/html/*.{html,css,png}; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done + for i in src/gudev/docs/html/*.{html,css,png}; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/gudev/; done diff --git a/src/udev/NEWS b/src/udev/NEWS new file mode 100644 index 000000000..f4f6f4e32 --- /dev/null +++ b/src/udev/NEWS @@ -0,0 +1,1735 @@ +udev 182 +======== +Rules files in /etc/udev/rules.s/ with the same name as rules files in +/run/udev/rules.d/ now always have precedence. The stack of files is now: +/usr/lib (package), /run (runtime, auto-generated), /etc (admin), while +the later ones override the earlier ones. In other words: the admin has +always the last say. + +USB auto-suspend is now enabled by default for some built-in USB HID +devices. + +/dev/disk/by-path/ links are no longer created for ATA devices behind +an 'ATA transport class', the logic to extract predictable numbers does +not exist in the kernel at this moment. + +/dev/disk/by-id/scsi-* compatibility links are no longer created for +ATA devices, they have their own ata-* prefix. + +The s390 rule to set mode == 0666 for /dev/z90crypt is is removed from +the udev tree and will be part of s390utils (or alternatively could be +done by the kernel driver itself). + +The udev-acl tool is no longer provided, it will be part of a future +ConsoleKit release. On systemd systems, advanced ConsoleKit and udev-acl +functionality are provided by systemd. + +udev 181 +======== +Require kmod version 5. + +Provide /dev/cdrom symlink for /dev/sr0. + +udev 180 +======== +Fix for ID_PART_ENTRY_* property names, added by the blkid built-in. The +fix is needed for udisk2 to operate properly. + +Fix for skipped rule execution when the kernel has removed the device +node in /dev again, before the event was even started. The fix is needed +to run device-mapper/LVM events properly. + +Fix for the man page installation, which was skipped when xsltproc was not +installed. + +udev 179 +======== +Bugfix for $name resolution, which broke at least some keymap handling. + +udev 178 +======== +Bugfix for the firmware loading behavior with kernel modules which +try to load firmware in the module_init() path. The blocked event +runs into a timout now, which should allow the firmware to be loaded. + +Bugfix for a wrong DEVNAME= export, which breaks at least the udev-acl +tool. + +Bugfix for missing ID_ properties for GPT partitions. + +The RUN+="socket:.." option is deprecated and should not be used. A warning +during rules parsing is printed now. Services which listen to udev events, +need to subscribe to the netlink messages with libudev and not let udev block +in the rules execution until the message is delivered. + +udev 177 +======== +Bugfix for rule_generator instalation. + +udev 176 +======== +The 'devtmpfs' filesystem is required now, udev will not create or delete +device nodes anymore, it only adjusts permissions and ownership of device +nodes and maintains additional symlinks. + +A writable /run directory (ususally tmpfs) is required now for a fully +functional udev, there is no longer a fallback to /dev/.udev. + +The default 'configure' install locations have changed. Packages for systems +with the historic / vs. /usr split need to be adapted, otherwise udev will +be installed in /usr and not work properly. Example configuration options +to install things the traditional way are in INSTALL. + +The default install location of the 'udevadm' tool moved from 'sbin' +to /usr/bin. Some tools expect udevadm in 'sbin', a symlink to udevadm +needs to be manually created if needed, or --bindir=/sbin be specified. + +The expected value of '--libexecdir=' has changed and must no longer contain +the 'udev' directory. + +Kernel modules are now loaded directly by linking udev to 'libkmod'. The +'modprobe' tool is no longer executed by udev. + +The 'blkid' tool is no longer executed from udev rules. Udev links +directly to libblkid now. + +Firmware is loaded natively by udev now, the external 'firmware' binary +is no longer used. + +All built-in tools can be listed and tested with 'udevadm test-builtin'. + +The 'udevadm control --reload-rules' option has been renamed to '--reload'. +It now also reloads the kernel module configuration. + +The systemd socket files use PassCredentials=yes, which is available in +systemd version 38. + +The udev build system only creates a .xz tarball now. + +All tabs in the source code used for indentation are replaced by spaces now. :) + +udev 175 +======== +Bugfixes. + +udev 174 +======== +Bugfixes. + +The udev daemon moved to /lib/udev/udevd. Non-systemd init systems +and non-dracut initramfs image generators need to change the init +scripts. Alternatively the udev build needs to move udevd back to +/sbin or create a symlink in /sbin, which is not done by default. + +The path_id, usb_id, input_id tools are built-in commands now and +the stand-alone tools do not exist anymore. Static lists of file in +initramfs generators need to be updated. For testing, the commands +can still be executed standalone with 'udevadm test-builtin <cmd>'. + +The fusectl filesystem is no longer mounted directly from udev. +Systemd systems will take care of mounting fusectl and configfs +now. Non-systemd systems need to ship their own rule if they +need these filesystems auto-mounted. + +The long deprecated keys: SYSFS=, ID=, BUS= have been removed. + +The support for 'udevadm trigger --type=failed, and the +RUN{fail_event_on_error} attribute was removed. + +The udev control socket is now created in /run/udev/control +and no longer as an abstract namespace one. + +The rules to create persistent network interface and cdrom link +rules automatically in /etc/udev/rules.d/ have been disabled by +default. Explicit configuration will be required for these use +cases, udev will no longer try to write any persistent system +configuration from a device hotplug path. + +udev 173 +======== +Bugfixes. + +The udev-acl extra is no longer enabled by default now. To enable it, +--enable-udev_acl needs to be given at ./configure time. On systemd +systems, the udev-acl rules prevent it from running as the functionality +has moved to systemd. + +udev 172 +======== +Bugfixes. + +Udev now enables kernel media-presence polling if available. Part +of udisks optical drive tray-handling moved to cdrom_id: The tray +is locked as soon as a media is detected to enable the receiving +of media-eject-request events. Media-eject-request events will +eject the media. + +Libudev enumerate is now able to enumerate a subtree of a given +device. + +The mobile-action-modeswitch modeswitch tool was deleted. The +functionality is provided by usb_modeswitch now. + +udev 171 +======== +Bugfixes. + +The systemd service files require systemd version 28. The systemd +socket activation make it possible now to start 'udevd' and 'udevadm +trigger' in parallel. + +udev 170 +======== +Fix bug in control message handling, which can lead to a failing +udevadm control --exit. Thanks to Jürg Billeter for help tracking +it down. + +udev 169 +======== +Bugfixes. + +We require at least Linux kernel 2.6.32 now. Some platforms might +require a later kernel that supports accept4() and similar, or +need to backport the trivial syscall wiring to the older kernels. + +The hid2hci tool moved to the bluez package and was removed. + +Many of the extras can be --enable/--disabled at ./configure +time. The --disable-extras option was removed. Some extras have +been disabled by default. The current options and their defaults +can be checked with './configure --help'. + +udev 168 +======== +Bugfixes. + +Udev logs a warning now if /run is not writable at udevd +startup. It will still fall back to /dev/.udev, but this is +now considered a bug. + +The running udev daemon can now cleanly shut down with: + udevadm control --exit + +Udev in initramfs should clean the state of the udev database +with: udevadm info --cleanup-db which will remove all state left +behind from events/rules in initramfs. If initramfs uses +--cleanup-db and device-mapper/LVM, the rules in initramfs need +to add OPTIONS+="db_persist" for all dm devices. This will +prevent removal of the udev database for these devices. + +Spawned programs by PROGRAM/IMPORT/RUN now have a hard timeout of +120 seconds per process. If that timeout is reached the spawned +process will be killed. The event timeout can be overwritten with +udev rules. + +If systemd is used, udev gets now activated by netlink data. +Systemd will bind the netlink socket which will buffer all data. +If needed, such setup allows a seemless update of the udev daemon, +where no event can be lost during a udevd update/restart. +Packages need to make sure to: systemctl stop udev.socket udev.service +or 'mask' udev.service during the upgrade to prevent any unwanted +auto-spawning of udevd. +This version of udev conflicts with systemd version below 25. The +unchanged service files will not wirk correctly. + +udev 167 +======== +Bugfixes. + +The udev runtime data moved from /dev/.udev/ to /run/udev/. The +/run mountpoint is supposed to be a tmpfs mounted during early boot, +available and writable to for all tools at any time during bootup, +it replaces /var/run/, which should become a symlink some day. + +If /run does not exist, or is not writable, udev will fall back using +/dev/.udev/. + +On systemd systems with initramfs and LVM used, packagers must +make sure, that the systemd and initramfs versions match. The initramfs +needs to create the /run mountpoint for udev to store the data, and +mount this tmpfs to /run in the rootfs, so the that the udev database +is preserved for the udev version started in the rootfs. + +The command 'udevadm info --convert-db' is gone. The udev daemon +itself, at startup, converts any old database version if necessary. + +The systemd services files have been reorganized. The udev control +socket is bound by systemd and passed to the started udev daemon. +The udev-settle.service is no longer active by default. Services which +can not handle hotplug setups properly need to actively pull it in, to +act like a barrier. Alternatively the settle service can be unconditionally +'systemctl'enabled, and act like a barrier for basic.target. + +The fstab_import callout is no longer built or installed. Udev +should not be used to mount, does not watch changes to fstab, and +should not mirror fstab values in the udev database. + +udev 166 +======== +Bugfixes. + +New and updated keymaps. + +udev 165 +======== +Bugfixes. + +The udev database has changed, After installation of a new udev +version, 'udevadm info --convert-db' should be called, to let the new +udev/libudev version read the already stored data. + +udevadm now supports quoting of property values, and prefixing of +key names: + $ udevadm info --export --export-prefix=MY_ --query=property -n sda + MY_MAJOR='259' + MY_MINOR='0' + MY_DEVNAME='/dev/sda' + MY_DEVTYPE='disk' + ... + +libudev now supports: + udev_device_get_is_initialized() + udev_enumerate_add_match_is_initialized() +to be able to skip devices the kernel has created , but udev has +not already handled. + +libudev now supports: + udev_device_get_usec_since_initialized() +to retrieve the "age" of a udev device record. + +GUdev supports a more generic GUdevEnumerator class, udev TAG +handling, device initialization and timestamp now. + +The counterpart of /sys/dev/{char,block}/$major:$minor, +/dev/{char,block}/$major:$minor symlinks are now unconditionally +created, even when no rule files exist. + +New and updated keymaps. + +udev 164 +======== +Bugfixes. + +GUdev moved from /usr to /. + +udev 163 +======== +Bugfixes. + +udev 162 +======== +Bugfixes. + +Persistent network naming rules are disabled inside of Qemu/KVM now. + +New and updated keymaps. + +Udev gets unconditionally enabled on systemd installations now. There +is no longer the need to to run 'systemctl enable udev.service'. + +udev 161 +======== +Bugfixes. + +udev 160 +======== +Bugfixes. + +udev 159 +======== +Bugfixes. + +New and fixed keymaps. + +Install systemd service files if applicable. + +udev 158 +======== +Bugfixes. + +All distribution specific rules are removed from the udev source tree, +most of them are no longer needed. The Gentoo rules which allow to support +older kernel versions, which are not covered by the default rules anymore +has moved to rules/misc/30-kernel-compat.rules. + +udev 157 +======== +Bugfixes. + +The option --debug-trace and the environemnt variable UDEVD_MAX_CHILDS= +was removed from udevd. + +Udevd now checks the kernel commandline for the following variables: + udev.log-priority=<syslog priority> + udev.children-max=<maximum number of workers> + udev.exec-delay=<seconds to delay the execution of RUN=> +to help debuging coldplug setups where the loading of a kernel +module crashes the system. + +The subdirectory in the source tree rules/packages has been renamed to +rules/arch, anc contains only architecture specific rules now. + +udev 156 +======== +Bugfixes. + +udev 155 +======== +Bugfixes. + +Now the udev daemon itself, does on startup: + - copy the content of /lib/udev/devices to /dev + - create the standard symlinks like /dev/std{in,out,err}, + /dev/core, /dev/fd, ... + - use static node information provided by kernel modules + and creates these nodes to allow module on-demand loading + - possibly apply permissions to all ststic nodes from udev + rules which are annotated to match a static node + +The default mode for a device node is 0600 now to match the kernel +created devtmpfs defaults. If GROUP= is specified and no MODE= is +given the default will be 0660. + +udev 154 +======== +Bugfixes. + +Udev now gradually starts to pass control over the primary device nodes +and their names to the kernel, and will in the end only manage the +permissions of the node, and possibly create additional symlinks. +As a first step NAME="" will be ignored, and NAME= setings with names +other than the kernel provided name will result in a logged warning. +Kernels that don't provide device names, or devtmpfs is not used, will +still work as they did before, but it is strongly recommended to use +only the same names for the primary device node as the recent kernel +provides for all devices. + +udev 153 +======== +Fix broken firmware loader search path. + +udev 152 +======== +Bugfixes. + +"udevadm trigger" defaults to "change" events now instead of "add" +events. The "udev boot script" might need to add "--action=add" to +the trigger command if not already there, in case the initial coldplug +events are expected as "add" events. + +The option "all_partitons" was removed from udev. This should not be +needed for usual hardware. Udev can not safely make assumptions +about non-existing partition major/minor numbers, and therefore no +longer provide this unreliable and unsafe option. + +The option "ignore_remove" was removed from udev. With devtmpfs +udev passed control over device nodes to the kernel. This option +should not be needed, or can not work as advertised. Neither +udev nor the kernel will remove device nodes which are copied from +the /lib/udev/devices/ directory. + +All "add|change" matches are replaced by "!remove" in the rules and +in the udev logic. All types of events will update possible symlinks +and permissions, only "remove" is handled special now. + +The modem modeswitch extra was removed and the external usb_modeswitch +program should be used instead. + +New and fixed keymaps. + +udev 151 +======== +Bugfixes. + +udev 150 +======== +Bugfixes. + +Kernels with SYSFS_DEPRECATED=y are not supported since a while. Many users +depend on the current sysfs layout and the information not available in the +deprecated layout. All remaining support for the deprecated sysfs layout is +removed now. + +udev 149 +======== +Fix for a possible endless loop in the new input_id program. + +udev 148 +======== +Bugfixes. + +The option "ignore_device" does no longer exist. There is no way to +ignore an event, as libudev events can not be suppressed by rules. +It only prevented RUN keys from being executed, which results in an +inconsistent behavior in current setups. + +BUS=, SYSFS{}=, ID= are long deprecated and should be SUBSYSTEM(S)=, +ATTR(S){}=, KERNEL(S)=. It will cause a warning once for every rule +file from now on. + +The support for the deprecated IDE devices has been removed from the +default set of rules. Distros who still care about non-libata drivers +need to add the rules to the compat rules file. + +The ID_CLASS property on input devices has been replaced by the more accurate +set of flags ID_INPUT_{KEYBOARD,KEY,MOUSE,TOUCHPAD,TABLET,JOYSTICK}. These are +determined by the new "input_id" prober now. Some devices, such as touchpads, +can have several classes. So if you previously had custom udev rules which e. g. +checked for ENV{ID_CLASS}=="kbd", you need to replace this with +ENV{ID_INPUT_KEYBOARD}=="?*". + +udev 147 +======== +Bugfixes. + +To support DEVPATH strings larger than the maximum file name length, the +private udev database format has changed. If some software still reads the +private files in /dev/.udev/, which it shouldn't, now it's time to fix it. +Please do not port anything to the new format again, everything in /dev/.udev +is and always was private to udev, and may and will change any time without +prior notice. + +Multiple devices claiming the same names in /dev are limited to symlinks +only now. Mixing identical symlink names and node names is not supported. +This reduces the amount of data in the database significantly. + +NAME="%k" causes a warning now. It's is and always was completely superfluous. +It will break kernel supplied DEVNAMEs and therefore it needs to be removed +from all rules. + +Most NAME= instructions got removed. Kernel 2.6.31 supplies the needed names +if they are not the default. To support older kernels, the NAME= rules need to +be added to the compat rules file. + +Symlinks to udevadm with the old command names are no longer resolved to +the udevadm commands. + +The udev-acl tool got adopted to changes in ConsoleKit. Version 0.4.1 is +required now. + +The option "last_rule" does no longer exist. Its use breaks too many +things which expect to be run from independent later rules, and is an idication +that something needs to be fixed properly instead. + +The gudev API is no longer marked as experimental, +G_UDEV_API_IS_SUBJECT_TO_CHANGE is no longer needed. The gudev introspection +is enabled by default now. Various projects already depend on introspection +information to bind dynamic languages to the gudev interfaces. + +udev 146 +======== +Bugfixes. + +The udevadm trigger "--retry-failed" option, which is replaced since quite +a while by "--type=failed" is removed. + +The failed tracking was not working at all for a few releases. The RUN +option "ignore_error" is replaced by a "fail_event_on_error" option, and the +default is not to track any failing RUN executions. + +New keymaps, new modem, hid2hci updated. + +udev 145 +======== +Fix possible crash in udevd when worker processes are busy, rules are +changed at the same time, and workers get killed to reload the rules. + +udev 144 +======== +Bugfixes. + +Properties set with ENV{.FOO}="bar" are marked private by starting the +name with a '.'. They will not be stored in the database, and not be +exported with the event. + +Firmware files are looked up in: + /lib/firmware/updates/$(uname -r) + /lib/firmware/updates + /lib/firmware/$(uname -r) + /lib/firmware" +now. + +ATA devices switched the property from ID_BUS=scsi to ID_BUS=ata. +ata_id, instead of scsi_id, is the default tool now for ATA devices. + +udev 143 +======== +Bugfixes. + +The configure options have changed because another library needs to be +installed in a different location. Instead of exec_prefix and udev_prefix, +libdir, rootlibdir and libexecdir are used. The Details are explained in +the README file. + +Event processes now get re-used after they handled an event. This reduces +the number of forks and the pressure on the CPU significantly, because +cloned event processes no longer cause page faults in the main daemon. +After the events have settled, a few worker processes stay around for +future events, all others get cleaned up. + +To be able to use signalfd(), udev depends on kernel version 2.6.25 now. +Also inotify support is mandatory now to run udev. + +The format of the queue exported by the udev damon has changed. There is +no longer a /dev/.udev/queue/ directory. The current event queue can be +accessed with udevadm settle and libudedv. + +Libudev does not have the unstable API header anymore. From now on, +incompatible changes will be handled by bumping the library major version. + +To build udev from the git tree gtk-doc is needed now. The tarballs will +build without it and contain the pre-built documentation. An online copy +is available here: + http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/ + +The tools from the udev-extras repository have been merged into the main +udev repository. Some of the extras have larger external dependencies, and +they can be disabled with the configure switch --disable-extras. + +udev 142 +======== +Bugfixes. + +The program vol_id and the library libvolume_id are removed from the +repository. Libvolume_id is merged with libblkid from the util-linux-ng +package. Persistent disk links for label and uuid depend on the +util-linux-ng version (2.15) of blkid now. Older versions of blkid +can not be used with udev. + +Libudev allows to subscribe to udev events. To prevent unwanted messages +to be delivered, and waking up the subscribing process, a filter can be +installed, to drop messages inside a kernel socket filter. The filters +match on the <subsytem>:<devtype> properties of the device. + This is part of the ongoing effort to replace HAL, and switch current +users over to directly use libudev. + Libudev is still marked as experimental, and its interface might +eventually change if needed, but no major changes of the currently exported +interface are expected anymore, and a first stable release should happen +soon. + +A too old kernel (2.6.21) or a kernel with CONFIG_SYSFS_DEPRECATED +is not supported since while and udevd will log an error message at +startup. It should still be able to boot-up, but advanced rules and system +services which depend on the information not available in the old sysfs +format will fail to work correctly. + +DVB device naming is supplied by the kernel now. In case older kernels +need to be supported, the old shell script should be added to a compat +rules file. + +udev 141 +======== +Bugfixes. + +The processed udev events get send back to the netlink socket. Libudev +provides access to these events. This is work-in-progress, to replace +the DeviceKit daemon functionality directly with libudev. There are +upcoming kernel changes to allow non-root users to subcribe to these +events. + +udev 140 +======== +Bugfixes. + +"udevadm settle" now optionally accepts a range of events to wait for, +instead of waiting for "all" events. + +udev 139 +======== +Bugfixes. + +The installed watch for block device metadata changes is now removed +during event hadling, because some (broken) tools may be called from udev +rules and (wrongly) open the device with write access. After the finished +event handling the watch is restored. + +udev 138 +======== +Bugfixes. + +Device nodes can be watched for changes with inotify with OPTIONS="watch". +If closed after being opened for writing, a "change" uevent will occur. +/dev/disk/by-{label,uuid}/* symlinks will be automatically updated. + +udev 137 +======== +Bugfixes. + +The udevadm test command has no longer a --force option, nodes and symlinks +are always updated with a test run now. + +The udevd daemon can be started with --resolve-names=never to avoid all user +and group lookups (e.g. in cut-down systems) or --resolve-names=late to +lookup user and groups every time events are handled. + +udev 136 +======== +Bugfixes. + +We are currently merging the Ubuntu rules in the udev default rules, +and get one step closer to provide a common Linux /dev setup, regarding +device names, symlinks, and default device permissions. On udev startup, +we now expect the following groups to be resolvable to their ids with +glibc's getgrnam(): + disk, cdrom, floppy, tape, audio, video, lp, tty, dialout, kmem. +LDAP setups need to make sure, that these groups are always resolvable at +bootup, with only the rootfs mounted, and without network access available. + +Some systems may need to add some new, currently not used groups, or need +to add some users to new groups, but the cost of this change is minimal, +compared to the pain the current, rather random, differences between the +various distributions cause for upstream projects and third-party vendors. + +In general, "normal" users who log into a machine should never be a member +of any such group, but the device-access should be managed by dynamic ACLs, +which get added and removed for the specific users on login/logout and +session activity/inactivity. These groups are only provided for custom setups, +and mainly system services, to allow proper privilege separation. +A video-streaming daemon uid would be a member of "audio" and "video", to get +access to the sound and video devices, but no "normal" user should ever belong +to the "audio" group, because he could listen to the built-in microphone with +any ssh-session established from the other side of the world. + +/dev/serial/by-{id,path}/ now contains links for ttyUSB devices, +which do not depend on the kernel device name. As usual, unique +devices - only a single one per product connected, or a real +USB serial number in the device - are always found with the same +name in the by-id/ directory. +Completely identical devices may overwrite their names in by-id/ +and can only be found reliably in the by-path/ directory. Devices +specified by by-path/ must not change their connection, like the +USB port number they are plugged in, to keep their name. + +To support some advanced features, Linux 2.6.22 is the oldest supported +version now. The kernel config with enabled SYSFS_DEPRECATED is no longer +supported. Older kernels should still work, and devices nodes should be +reliably created, but some rules and libudev will not work correctly because +the old kernels do not provide the expected information or interfaces. + +udev 135 +======== +Bugfixes. + +Fix for a possible segfault while swapping network interface names in udev +versions 131-134. + +udev 134 +======== +Bugfixes. + +The group "video" is part of the default rules now. + +udev 133 +======== +Bugfix for kernels using SYSFS_DEPRECATED* option and finding parent +block devices in some cases. No common distro uses this option anymore, +and we do not get enough testing for this and recent udev versions. If +this option is not needed to run some old distro with a new kernel, +it should be disabled in the kernel config. + +Bugfix for the $links substitution variable, which may crash if no links +are created. This should not happen in usual setups because we always +create /dev/{block,char}/ links. + +The strings of the parsed rules, which are kept in memory, no longer +contain duplicate entries, or duplicate tails of strings. This, and the +new rules parsing/matching code reduces the total in-memory size of +a huge distro rule sets to 0.08 MB, compared to the 1.2MB of udev +version 130. + +The export of DEVTYPE=disk/partition got removed from the default +rules. This value is available from the kernel. The pnp shell script +modprobe hack is removed from the default rules. ACPI devices have _proper_ +modalias support and take care of the same functionality. +Installations which support old kernels, but install current default +udev rules may want to add that to the compat rules file. + +Libvolume_id now always probes for all known filesystems, and does not +stop at the first match. Some filesystems are marked as "exclusive probe", +and if any other filesytem type matches at the same time, libvolume_id +will, by default, not return any probing result. This is intended to prevent +mis-detection with conflicting left-over signatures found from earlier +file system formats. That way, we no longer depend on the probe-order +in case of multiple competing signatures. In some setups the kernel allows +to mount a volume with just the old filesystem signature still in place. +This may damage the new filesystem and cause data-loss, just by mounting +it. Because volume_id can not decide which one the correct signature is, +the wrong signatures need to be removed manually from the volume, or the +volume needs to be reformatted, to enable filesystem detection and possible +auto-mounting. + +udev 132 +======== +Fix segfault if compiled without optimization and dbg() does not get +compiled out and uses variables which are not available. + +udev 131 +======== +Bugfixes. (And maybe new bugs. :)) + +The rule matching engine got converted from a rule list to a token +array which reduced the in-memory rules representation of a full +featured distros with thousends of udev rules from 1.2MB to 0.12 MB. +Limits like 5 ENV and ATTR matches, and one single instance for most +other keys per rule are gone. + +The NAME assignment is no longer special cased. If later rules assign +a NAME value again, the former value will be overwritten. As usual +for most other keys, the NAME value can be protected by doing a final +assignment with NAME:="<value>". + +All udev code now uses libudev, which is also exported. The library +is still under development, marked as experimental, and its interface +may change as long as the DeviceKit integration is not finished. + +Many thanks to Alan Jenkins for his continuous help, and finding and +optimizing some of the computing expensive parts. + +udev 130 +======== +Bugfixes. + +Kernel devices and device nodes are connected now by reverse indizes in +/sys and /dev. A device number retrieved by a stat() or similar, the +kernel device directory can be found by looking up: + /sys/dev/{block,char}/<maj>:<min> +and the device node of the same device by looking up: + /dev/{block,char}/<maj>:<min> + +udev 129 +======== +Fix recently introduced bug, which caused a compilation without large +file support, where vol_id does not recognize raid signatures at the end +of a volume. + +Firewire disks now create both, by-id/scsi-* and by-id/ieee-* links. +Seems some kernel versions prevent the creation of the ieee-* links, +so people used the scsi-* link which disappeared now. + +More libudev work. Almost all udevadm functionality comes from libudev +now. + +udevadm trigger has a new option --type, which allows to trigger events +for "devices", for "subsystems", or "failed" devices. The old option +--retry-failed" still works, but is no longer mentioned in the man page. + +udev 128 +======== +Bugfixes. + +The udevadm info --device-id-of-file= output has changed to use +the obvious format. Possible current users should use the --export +option which is not affected. + +The old udev commands symlinks to udevadm are not installed, if +these symlinks are used, a warning is printed. + +udev 127 +======== +Bugfixes. + +Optical drive's media is no longer probed for raid signatures, +reading the end of the device causes some devices to malfunction. +Also the offset of the last session found is used now to probe +for the filesystem. + +The volume_id library got a major version number update to 1, +some deprecated functions are removed. + +A shared library "libudev" gets installed now to provide access +to udev device information. DeviceKit, the successor of HAL, will +need this library to access the udev database and search sysfs for +devices. +The library is currently in an experimental state, also the API is +expected to change, as long as the DeviceKit integration is not +finished. + +udev 126 +======== +We use ./configure now. See INSTALL for details. Current +options are: + --prefix= + "/usr" - prefix for man pages, include files + --exec-prefix= + "" - the root filesystem, prefix for libs and binaries + --sysconfdir= + "/etc" + --with-libdir-name= + "lib" - directory name for libraries, not a path name + multilib 64bit systems may use "lib64" instead of "lib" + --enable-debug + compile-in verbose debug messages + --disable-logging + disable all logging and compile-out all log strings + --with-selinux + link against SELInux libraries, to set the expected context + for created files + +In the default rules, the group "disk" gets permissions 0660 instead +of 0640. One small step closer to unify distro rules. Some day, all +distros hopefully end up with the same set of rules. + +No symlinks to udevadm are installed anymore, if they are still needed, +they should be provided by the package. + +udev 125 +======== +Bugfixes. + +Default udev rules, which are not supposed to be edited by the user, should +be placed in /lib/udev/rules.d/ now, to make it clear that they are private to +the udev package and will be replaced with an update. Udev will pick up rule +files from: + /lib/udev/rules.d/ - default installed rules + /etc/udev/rules.d/ - user rules + on-the-fly generated rules + /dev/.udev/rules.d/ - temporary non-persistent rules created after bootup +It does not matter in which directory a rule file lives, all files are sorted +in lexical order. + +To help creating /dev/root, we have now: + $ udevadm info --export --export-prefix="ROOT_" --device-id-of-file=/ + ROOT_MAJOR=8 + ROOT_MINOR=5 +In case the current --device-id-of-file is already used, please switch to +the --export format version, it saves the output parsing and the old +format will be changed to use ':' as a separator, like the format in the +sysfs 'dev' file. + +udev 124 +======== +Fix cdrom_id to properly recognize blank media. + +udev 123 +======== +Bugfixes. + +Tape drive id-data is queried from /dev/bsg/* instead of the tape +nodes. This avoids rewinding tapes on open(). + +udev 122 +======== +Bugfixes. + +The symlinks udevcontrol and udevtrigger are no longer installed by +the Makefile. + +The scsi_id program does not depend on sysfs anymore. It can speak +SGv4 now, so /dev/bsg/* device nodes can be used, to query SCSI device +data, which should solve some old problems with tape devices, where +we better do not open all tape device nodes to identify the device. + +udev 121 +======== +Many bugfixes. + +The cdrom_id program is replaced by an advanced version, which can +detect most common device types, and also properties of the inserted +media. This is part of moving some basic functionality from HAL into +udev (and the kernel). + +udev 120 +======== +Bugfixes. + +The last WAIT_FOR_SYSFS rule is removed from the default rules. + +The symlinks to udevadm for the debugging tools: udevmonitor and +udevtest are no longer created. + +The symlinks to the udevadm man page for the old tool names are +no longer created. + +Abstract namespace sockets paths in RUN+="socket:@<path>" rules, +should be prefixed with '@' to indicate that the path is not a +real file. + +udev 119 +======== +Bugfixes. + +udev 118 +======== +Bugfixes. + +Udevstart is removed from the tree, it did not get installed for +a long time now, and is long replaced by trigger and settle. + +udev 117 +======== +Bugfixes. + +All udev tools are merged into a single binary called udevadm. +The old names of the tools are built-in commands in udevadm now. +Symlinks to udevadm, with the names of the old tools, provide +the same functionality as the standalone tools. There is also +only a single udevadm.8 man page left for all tools. + +Tools like mkinitramfs should be checked, if they need to include +udevadm in the list of files. + +udev 116 +======== +Bugfixes. + +udev 115 +======== +Bugfixes. + +The etc/udev/rules.d/ directory now contains a default set of basic +udev rules. This initial version is the result of a rules file merge +of Fedora and openSUSE. For these both distros only a few specific +rules are left in their own file, named after the distro. Rules which +are optionally installed, because they are only valid for a specific +architecture, or rules for subsystems which are not always used are +in etc/udev/packages/. + +udev 114 +======== +Bugfixes. + +Dynamic rules can be created in /dev/.udev/rules.d/ to trigger +actions by dynamically created rules. + +SYMLINK=="<value>" matches agains the entries in the list of +currently defined symlinks. The links are not created in the +filesystem at that point in time, but the values can be matched. + +RUN{ignore_error}+="<program>" will ignore any exit code from the +program and not record as a failed event. + +udev 113 +======== +Bugfixes. + +Final merge of patches/features from the Ubuntu package. + +udev 112 +======== +Bugfixes. + +Control characters in filesystem label strings are no longer silenty +removed, but hex-encoded, to be able to uniquely identify the device +by its symlink in /dev/disk/by-label/. +If libvolume_id is used by mount(8), LABEL= will work as expected, +if slashes or other characters are used in the label string. + +To test the existence of a file, TEST=="<file>" and TEST!="<file>" +can be specified now. The TEST key accepts an optional mode mask +TEST{0100}=="<is executable file>". + +Scsi_id now supports a mode without expecting scsi-specific sysfs +entries to allow the extraction of cciss-device persistent properties. + +udev 111 +======== +Bugfixes. + +In the future, we may see uuid's which are just simple character +strings (see the DDF Raid Specification). For that reason vol_id now +exports ID_FS_UUID_SAFE, just like ID_FS_LABEL_SAFE. For things like +the creation of symlinks, the *_SAFE values ensure, that no control +or whitespace characters are used in the filename. + +Possible users of libvolume_id, please use the volume_id_get_* functions. +The public struct will go away in a future release of the library. + +udev 110 +======== +Bugfixes. + +Removal of useless extras/eventrecorder.sh. + +udev 109 +======== +Bugfixes. + +udev 108 +======== +Bugfixes. + +The directory multiplexer for dev.d/ and hotplug.d are finally removed +from the udev package. + +udev 107 +======== +Bugfixes. + +Symlinks can have priorities now, the priority is assigned to the device +and specified with OPTIONS="link_priority=100". Devices with higher +priorities overwrite the symlinks of devices with lower priorities. +If the device that currently owns the link, goes away, the symlink +will be removed, and recreated, pointing to the next device with the +highest actual priority. This should make /dev/disk/by-{label,uuid,id} +more reliable, if multiple devices contain the same metadata and overwrite +these symlinks. + +The dasd_id program is removed from the udev tree, and dasdinfo, with the +needed rules, are part of the s390-tools now. + +Please add KERNEL=="[0-9]*:[0-9]*" to the scsi wait-for-sysfs rule, +we may get the scsi sysfs mess fixed some day, and this will only catch +the devices we are looking for. + +USB serial numbers for storage devices have the target:lun now appended, +to make it possibble to distinguish broken multi-lun devices with all +the same SCSI identifiers. + +Note: The extra "run_directory" which searches and executes stuff in +/etc/hotplug.d/ and /etc/dev.d/ is long deprecated, and will be removed +with the next release. Make sure, that you don't use it anymore, or +provides your own implementation of that inefficient stuff. +We are tired of reports about a "slow udev", because these directories +contain stuff, that runs with _every_ event, instead of using rules, +that run programs only for the matching events. + +udev 106 +======== +Bugfixes. + +udev 105 +======== +Bugfixes. + +DRIVER== will match only for devices that actually have a real +driver. DRIVERS== must be used, if parent devices should be +included in the match. + +Libvolume_id's "linux_raid" detection needed another fix. + +udev 104 +======== +Bugfixes. + +udev 103 +======== +Add additional check to volume_id detection of via_raid, cause +some company decided to put a matching pattern all over the empty +storage area of their music players. + +udev 102 +======== +Fix path_id for SAS devices. + +udev 101 +======== +The udev daemon can be started with --debug-trace now, which will +execute all events serialized to get a chance to catch a possible +action that crashes the box. + +A warning is logged, if PHYSDEV* keys, the "device" link, or a parent +device attribute like $attr{../file} is used, only WAIT_FOR_SYSFS rules +are excluded from the warning. Referencing parent attributes directly +may break when something in the kernel driver model changes. Udev will +just find the attribute by walking up the parent chain. + +Udevtrigger now sorts the list of devices depending on the device +dependency, so a "usb" device is triggered after the parent "pci" +device. + +udev 100 +======== +Revert persistent-storage ata-serial '_' '-' replacement. + +udev 099 +======== +Bugfixes. + +Udevtrigger can now filter the list of devices to be triggered. Matches +for subsystems or sysfs attributes can be specified. + +The entries in /dev/.udev/queue and /dev/.udev/failed have changed to +zero-sized files to avoid pointing to /sys and confuse broken tools which +scan the /dev directory. To retry failed events, udevtrigger --retry-failed +should be used now. + +The rules and scripts to create udev rules for persistent network +devices and optical drives are in the extras/rules_generator directory +now. If you use something similar, please consider replacing your own +version with this, to share the support effort. The rule_generator +installs its own rules into /etc/udev/rules.d. + +The cdrom_id tool installs its own rule now in /etc/udev/rules.d, cause +the rule_generator depends on cdrom_id to be called in an earlier rule. + +udev 098 +======== +Bugfixes. + +Renaming of some key names (the old names still work): +BUS -> SUBSYSTEMS, ID -> KERNELS, SYSFS -> ATTRS, DRIVER -> DRIVERS. +(The behavior of the key DRIVER will change soon in one of the next +releases, to match only the event device, please switch to DRIVERS +instead. If DRIVER is used, it will behave like DRIVERS, but an error +is logged. +With the new key names, we have a more consistent and simpler scheme. +We can match the properties of the event device only, with: KERNEL, +SUBSYSTEM, ATTR, DRIVER. Or include all the parent devices in the match, +with: KERNELS, SUBSYSTEMS, ATTRS, DRIVERS. ID, BUS, SYSFS, DRIVER are no +longer mentioned in the man page and should be switched in the rule +files. + +ATTR{file}="value" can be used now, to write to a sysfs file of the +event device. Instead of: + ..., SYSFS{type}=="0|7|14", RUN+="/bin/sh -c 'echo 60 > /sys$$DEVPATH/timeout'" +we now can do: + ..., ATTR{type}=="0|7|14", ATTR{timeout}="60" + +All the PHYSDEV* keys are deprecated and will be removed from a +future kernel: + PHYDEVPATH - is the path of a parent device and should not be + needed at all. + PHYSDEVBUS - is just a SUBSYSTEM value of a parent, and can be + matched with SUBSYSTEMS== + PHYSDEVDRIVER - for bus devices it is available as ENV{DRIVER}. + Newer kernels will have DRIVER in the environment, + for older kernels udev puts in. Class device will + no longer carry this property of a parent and + DRIVERS== can be used to match such a parent value. +Note that ENV{DRIVER} is only available for a few bus devices, where +the driver is already bound at device event time. On coldplug, the +events for a lot devices are already bound to a driver, and they will have +that value set. But on hotplug, at the time the kernel creates the device, +it can't know what driver may claim the device after that, therefore +in most cases it will be empty. + +Failed events should now be re-triggered with: + udevtrigger --retry-failed. +Please switch to this command, so we keep the details of the /dev/.udev/failed/ +files private to the udev tools. We may need to switch the current symlink +target, cause some obviously broken tools try to scan all files in /dev +including /dev/.udev/, find the links to /sys and end up stat()'ing sysfs files +million times. This takes ages on slow boxes. + +The udevinfo attribute walk (-a) now works with giving a device node +name (-n) instead of a devpath (-p). The query now always works, also when +no database file was created by udev. + +The built-in /etc/passwd /etc/group parser is removed, we always depend on +getpwnam() and getgrnam() now. One of the next releases will depend on +fnmatch() and may use getopt_long(). + +udev 097 +======== +Bugfixes and small improvements. + +udev 096 +======== +Fix path_id for recent kernels. + +udev 095 +======== +%e is finally gone. + +Added support for swapping network interface names, by temporarily +renaming the device and wait for the target name to become free. + +udev 094 +======== +The built-in MODALIAS key and substitution is removed. + +udev 093 +======== +The binary firmware helper is replaced by the usual simple +shell script. Udevsend is removed from the tree. + +udev 092 +======== +Bugfix release. + +udev 091 +======== +Some more keys require the correct use of '==' and '=' depending +on the kind of operation beeing an assignment or a match. Rules +with invalid operations are skipped and logged to syslog. Please +test with udevtest if the parsing of your rules throws errors and +fix possibly broken rules. + +udev 090 +======== +Provide "udevsettle" to wait for all current udev events to finish. +It also watches the current kernel netlink queue by comparing the +even sequence number to make sure that there are no current pending +events that have not already arrived in the daemon. + +udev 089 +======== +Fix rule to skip persistent rules for removable IDE devices, which +also skipped optical IDE drives. + +All *_id program are installed in /lib/udev/ by default now. + +No binary is stripped anymore as this should be done in the +packaging process and not at build time. + +libvolume_id is provided as a shared library now and vol_id is +linked against it. Also one of the next HAL versions will require +this library, and the HAL build process will also require the +header file to be installed. The copy of the same code in HAL will +be removed to have only a single copy left on the system. + +udev 088 +======== +Add persistent links for SCSI tapes. The rules file is renamed +to 60-persistent-storage.rules. + +Create persistent path for usb devices. Can be used for all sorts +of devices that can't be distinguished by other properties like +multiple identical keyboards and mice connected to the same box. + +Provide "udevtrigger" program to request events on coldplug. The +shell script is much too slow with thousends of devices. + +udev 087 +======== +Fix persistent disk rules to exclude removable IDE drives. + +Warn if %e, $modalias or MODALIAS is used. + +udev 086 +======== +Fix queue export, which wasn't correct for subsequent add/remove +events for the same device. + +udev 085 +======== +Fix cramfs detection on big endian. + +Make WAIT_FOR_SYSFS usable in "normal" rules and silent if the whole +device goes away. + +udev 084 +======== +If BUS== and SYSFS{}== have been used in the same rule, the sysfs +attributes were only checked at the parent device that matched the +by BUS requested subsystem. Fix it to also look at the device we +received the event for. + +Build variable CROSS has changed to CROSS_COMPILE to match the kernel +build name. + +udev 083 +======== +Fix a bug where NAME="" would prevent RUN from beeing executed. + +RUN="/bin/program" does not longer automatically add the subsystem +as the first parameter. This is from the days of /sbin/hotplug +which is dead now and it's just confusing to need to add a space at +the end of the program name to prevent this. +If you use rules that need the subsystem as the first parameter, +like the old "udev_run_hotlugd" and "udev_run_devd", add the subsystem +to the key like RUN+="/bin/program $env{SUBSYSTEM}". + +udev 082 +======== +The udev man page has moved to udev(7) as it does not describe a command +anymore. The programs udev, udevstart and udevsend are no longer installed +by default and must be copied manually, if they should be installed or +included in a package. + +Fix a bug where "ignore_device" could run earlier collected RUN keys before +the ignore rule was applied. + +More preparation for future sysfs changes. usb_id and scsi_id no longer +depend on a magic order of devices in the /devices chain. Specific devices +should be requested by their subsytem. + +This will always find the scsi parent device without depending on a specific +path position: + dev = sysfs_device_get(devpath); + dev_usb = sysfs_device_get_parent_with_subsystem(dev, "scsi"); + +The "device" link in the current sysfs layout will be automatically +_resolved_ as a parent and in the new sysfs layout it will just _be_ the +parent in the devpath. If a device is requested by it's symlink, like all +class devices in the new sysfs layout will look like, it gets automatically +resolved and substituted with the real devpath and not the symlink path. + +Note: +A similar logic must be applied to _all_ sysfs users, including +scripts, that search along parent devices in sysfs. The explicit use of +the "device" link must be avoided. With the future sysfs layout all +DEVPATH's will start with /devices/ and have a "subsystem" symlink poiting +back to the "class" or the "bus". The layout of the parent devices in +/devices is not necessarily expected to be stable across kernel releases and +searching for parents by their subsystem should make sysfs users tolerant +for changed parent chains. + +udev 081 +======== +Prepare udev to work with the experimental kernel patch, that moves +/sys/class devices to /sys/devices and /sys/block to /sys/class/block. + +Clarify BUS, ID, $id usage and fix $id behavior. This prepares for +moving the class devices to /sys/devices. + +Thanks again to Marco for help finding a hopefully nice compromise +to make %b simpler and working again. + +udev 080 +======== +Complete removal of libsysfs, replaced by simple helper functions +which are much simpler and a bit faster. The udev daemon operatesentirely +on event parameters and does not use sysfs for simple rules anymore. +Please report any new bugs/problems, that may be caused by this big +change. They will be fixed immediately. + +The enumeration format character '%e' is deprecated and will be +removed sometimes from a future udev version. It never worked correctly +outside of udevstart, so we can't use it with the new parallel +coldplug. A simple enumeration is as useless as the devfs naming +scheme, just get rid of both if you still use it. + +MODALIAS and $modalias is not needed and will be removed from one of +the next udev versions, replace it in all rules with ENV{MODALIAS} or +the sysfs "modalias" value. + +Thanks a lot to Marco for all his help on finding and fixing bugs. + +udev 079 +======== +Let scsi_id request libata drive serial numbers from page 0x80. + +Renamed etc/udev/persistent.rules to persistent-disk.rules and +added /dev/disk/by-name/* for device mapper device names. + +Removed %e from the man page. It never worked reliably outside +of udevstart and udevstart is no longer recommended to use. + +udev 078 +======== +Symlinks are now exported to the event environment. Hopefully it's no +longer needed to run udevinfo from an event process, like it was +mentioned on the hotplug list: + UDEV [1134776873.702967] add@/block/sdb + ... + DEVNAME=/dev/sdb + DEVLINKS=/dev/disk/by-id/usb-IBM_Memory_Key_0218B301030027E8 /dev/disk/by-path/usb-0218B301030027E8:0:0:0 + +udev 077 +======== +Fix a problem if udevsend is used as the hotplug handler and tries to use +syslog, which causes a "vc" event loop. 2.6.15 will make udevsend obsolete +and this kind of problems will hopefully go away soon. + +udev 076 +======== +All built-in logic to work around bad sysfs timing is removed with this +version. The need to wait for sysfs files is almost fixed with a kernel +version that doesn't work with this udev version anyway. Until we fix +the timing of the "bus" link creation, the former integrated logic should +be emulated by a rule placed before all other rules: + ACTION=="add", DEVPATH=="/devices/*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus" + +The option "udev_db" does no longer exist. All udev state will be in +/$udev_root/.udev/ now, there is no longer an option to set this +to anything else. +If the init script or something else used this value, just depend on +this hardcoded path. But remember _all_content_ of this directory is +still private to udev and can change at any time. + +Default location for rule sripts and helper programs is now: /lib/udev/. +Everything that is not useful on the commandline should go into this +directory. Some of the helpers in the extras folder are installed there +now. The rules need to be changed, to find the helpers there. + +Also /lib/udev/devices is recommended as a directory where packages or +the user can place real device nodes, which get copied over to /dev at +every boot. This should replace the various solutions with custom config +files. + +Udevsend does no longer start the udev daemon. This must be done with +the init script that prepares /dev on tmpfs and creates the initial nodes, +before starting the daemon. + +udev 075 +======== +Silent a too verbose error logging for the old hotplug.d/ dev.d/ +emulation. + +The copy of klibc is removed. A systemwide installed version of klibc +should be used to build a klibc udev now. + +udev 074 +======== +NAME="" will not create any nodes, but execute RUN keys. To completely +ignore an event the OPTION "ignore_device" should be used. + +After removal of the reorder queue, events with a TIMEOUT can be executed +without any queuing now. + +udev 073 +======== +Fixed bug in udevd, if inotify is not available. We depend on netlink +uevents now, kernels without that event source will not work with that +version of udev anymore. + +udev 072 +======== +The rule parsing happens now in the daemon once at startup, all udev +event processes inherit the already parsed rules from the daemon. +It is shipped with SUSE10.0 and reduces heavily the system load at +startup. The option to save precompiled rules and let the udev process +pick the them up is removed, as it's no longer needed. + +Kernel 2.6.15 will have symlinks at /class/input pointing to the real +device. Libsysfs is changed to "translate" the requested link into the +real device path, as it would happen with the hotplug event. Otherwise +device removal and the udev database will not work. + +Using 'make STRIPCMD=' will leave the binaries unstripped for debugging +and packaging. + +A few improvements for vol_id, the filesytem probing code. + +udev 071 +======== +Fix a stupid typo in extras/run_directory for "make install". + +scsi_id creates the temporary devnode now in /dev for usage with a +non-writable /tmp directory. + +The uevent kernel socket buffer can carry app. 50.000 events now, +let's see who can break this again. :) + +The upcoming kernel will have a new input driver core integration. +Some class devices are now symlinks to the real device. libsysfs +needs a fix for this to work correctly. Udevstart of older udev +versions will _not_ create these devices! + +udev 070 +======== +Fix a 'install' target in the Makefile, that prevents EXTRAS from +beeing installed. + +udev 069 +======== +A bunch of mostly trivial bugfixes. From now on no node name or +symlink name can contain any character than plain whitelisted ascii +characters or validated utf8 byte-streams. This is needed for the +/dev/disk/by-label/* links, because we import untrusted data and +export it to the filesystem. + +udev 068 +======== +More bugfixes. If udevd was started from the kernel, we don't +have stdin/stdout/stderr, which broke the forked tools in some +situations. + +udev 067 +======== +Bugfix. udevstart event ordering was broken for a long time. +The new run_program() uncovered it, because /dev/null was not +available while we try to run external programs. +Now udevstart should create it before we run anything. + +udev 066 +======== +Minor bugfixes and some distro rules updates. If you don't have the +persistent disk rules in /dev/disk/by-*/* on your distro, just +grab it from here. :) + +udev 065 +======== +We can use socket communication now to pass events from udev to +other programs: + RUN+="socket:/org/freedesktop/hal/udev_event" +will pass the whole udev event to the HAL daemon without the need +for a forked helper. (See ChangeLog for udevmonitor, as an example) + +udev 064 +======== +Mostly bugfixes and see ChangeLog. + +The test for the existence of an environment value should be +switched from: + ENV{KEY}=="*" to ENV{KEY}=="?*" +because "*" will not fail anymore, if the key does not exist or +is empty. + +udev 063 +======== +Bugfixes and a few tweaks described in the ChangeLog. + +udev 062 +======== +Mostly a Bugfix release. + +Added WAIT_FOR_SYSFS="<attribute>" to be able to fight against the sysfs +timing with custom rules. + +udev 061 +======== +We changed the internal rule storage format. Our large rule files took +2 MB of RAM, with the change we are down to 99kB. + +If the device-node has been created with default name and no symlink or +options are to remenber, it is not longer stored in the udevdb. HAL will +need to be updated to work correctly with that change. + +To overrride optimization flags, OPTFLAGS may be used now. + +udev 060 +======== +Bugfix release. + +udev 059 +======== +Major changes happened with this release. The goal is to take over the +complete kernel-event handling and provide a more efficient way to dispatch +kernel events. Replacing most of the current shell script logic and the +kernel forked helper with a netlink-daemon and a rule-based event handling. + +o udevd listens to netlink events now. The first valid netlink event + will make udevd ignore any message from udevsend that contains a + SEQNUM, to avoid duplicate events. The forked events can be disabled + with: + echo "" > /proc/sys/kernel/hotplug + For full support, the broken input-subsytem needs to be fixed, not to + bypass the driver core. + +o /etc/dev.d/ + /etc/hotplug.d/ directory multiplexing is completely + removed from udev itself and must be emulated by calling small + helper binaries provided in the extras folder: + make EXTRAS=extras/run_directory/ + will build udev_run_devd and udev_run_hotplugd, which can be called + from a rule if needed: + RUN+="/sbin/udev_run_hotplugd" + The recommended way to handle this is to convert all the calls from + the directories to explicit udev rules and get completely rid of the + multiplexing. (To catch a ttyUSB event, you now no longer need to + fork and exit 300 tty script instances you are not interested in, it + is just one rule that matches exactly the device.) + +o udev handles now _all_ events not just events for class and block + devices, this way it is possible to control the complete event + behavior with udev rules. Especially useful for rules like: + ACTION="add", DEVPATH="/devices/*", MODALIAS=="?*", RUN+="/sbin/modprobe $modalias" + +o As used in the modalias rule, udev supports now textual + substitution placeholder along with the usual format chars. This + needs to be documented, for now it's only visible in udev_rules_parse.c. + +o The rule keys support now more operations. This is documented in the + man page. It is possible to add values to list-keys like the SYMLINK + and RUN list with KEY+="value" and to clear the list by assigning KEY="". + Also "final"-assignments are supported by using KEY:="value", which will + prevent changing the key by any later rule. + +o kernel 2.6.12 has the "detached_state" attribute removed from + sysfs, which was used to recognize sysfs population. We switched that + to wait for the "bus" link, which is only available in kernels after 2.6.11. + Running this udev version on older kernels may cause a short delay for + some events. + +o To provide infrastructure for persistent device naming, the id programs: + scsi_id, vol_id (former udev_volume_id), and ata_id (new) are able now + to export the probed data in environment key format: + pim:~ # /sbin/ata_id --export /dev/hda + ID_MODEL=HTS726060M9AT00 + ID_SERIAL=MRH401M4G6UM9B + ID_REVISION=MH4OA6BA + + The following rules: + KERNEL="hd*[!0-9]", IMPORT="/sbin/ata_id --export $tempnode" + KERNEL="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_MODEL}_$env{ID_SERIAL}" + + Will create: + kay@pim:~> tree /dev/disk + /dev/disk + |-- by-id + | |-- HTS726060M9AT00_MRH401M4G6UM9B -> ../../hda + | `-- IBM-Memory_Key -> ../../sda + |-- by-label + | |-- swap -> ../../hda1 + | |-- date -> ../../sda1 + | `-- home -> ../../hda3 + `-- by-uuid + |-- 2E08712B0870F2E7 -> ../../hda3 + |-- 9352cfef-7687-47bc-a2a3-34cf136f72e1 -> ../../hda1 + |-- E845-7A89 -> ../../sda1 + `-- b2a61681-3812-4f13-a4ff-920d70604299 -> ../../hda2 + + The IMPORT= operation will import these keys in the environment and make + it available for later PROGRAM= and RUN= executed programs. The keys are + also stored in the udevdb and can be queried from there with one of the + next udev versions. + +o A few binaries are silently added to the repository, which can be used + to replay kernel events from initramfs instead of using coldplug. udevd + can be instructed now to queue-up events while the stored events from + initramfs are filled into the udevd-queue. This code is still under + development and there is no documentation now besides the code itself. + The additional binaries get compiled, but are not installed by default. + +o There is also a temporary fix for a performance problem where too many + events happen in parallel and every event needs to parse the rules. + udev can now read precompiled rules stored on disk. This is likely to be + replaced by a more elegant solution in a future udev version. + +udev 058 +======== +With kernel version 2.6.12, the sysfs file "detached_state" was removed. +Fix for libsysfs not to expect this file was added. + +udev 057 +======== +All rules are applied now, but only the first matching rule with a NAME-key +will be applied. All later rules with NAME-key are completely ignored. This +way system supplied symlinks or permissions gets applied to user-defined +naming rules. + +Note: +Please check your rules setup, if you may need to add OPTIONS="last_rule" +to some rules, to keep the old behavior. + +The rules are read on "remove"-events too. That makes is possible to match +with keys that are available on remove (KERNEL, SUBSYSTEM, ID, ENV, ...) to +instruct udev to ignore an event (OPTIONS="ignore_device"). +The new ACTION-key may be used to let a rule act only at a "remove"-event. + +The new RUN-key supports rule-based execution of programs after device-node +handling. This is meant as a general replacement for the dev.d/-directories +to give fine grained control over the execution of programs. + +The %s{}-sysfs format char replacement values are searched at any of the +devices in the device chain now, not only at the class-device. + +We support log priority levels now. The value udev_log in udev.conf is used +to determine what is printed to syslog. This makes it possible to +run a version with compiled-in debug messages in a production environment +which is sometimes needed to find a bug. +It is still possible to supress the inclusion of _any_ syslog usage with +USE_LOG=false to create the smallest possible binaries if needed. +The configured udev_log value can be overridden with the environment variable +UDEV_LOG. + +udev 056 +======== +Possible use of a system-wide klibc: + make USE_KLIBC=true KLCC=/usr/bin/klcc all +will link against an external klibc and our own version will be ignored. + +udev 055 +======== +We support an unlimited count of symlinks now. + +If USE_STATIC=true is passed to a glibc build, we link statically and use +a built-in userdb parser to resolve user and group names. + +The PLACE= key is gone. It can be replaced by an ID= for a long time, because +we walk up the chain of physical devices to find a match. + +The KEY="<value>" format supports '=', '==', '!=,' , '+=' now. This makes it +easy to skip certain attribute matches without composing rules with weird +character class negations like: + KERNEL="[!s][!c][!d]*" +this can now be replaced with: + KERNEL!="scd*" +The current simple '=' is still supported, and should work as it does today, +but existing rules should be converted if possible, to be better readable. + +We have new ENV{}== key now, to match against a maximum of 5 environment +variables. + +udevstart is its own binary again, because we don't need co carry this araound +with every forked event. diff --git a/src/udev/README b/src/udev/README new file mode 100644 index 000000000..38459c6b2 --- /dev/null +++ b/src/udev/README @@ -0,0 +1,101 @@ +udev - Linux userspace device management + +Integrating udev in the system has complex dependencies and may differ from +distribution to distribution. A system may not be able to boot up or work +reliably without a properly installed udev version. The upstream udev project +does not recommend replacing a distro's udev installation with the upstream +version. + +The upstream udev project's set of default rules may require a most recent +kernel release to work properly. + +Tools and rules shipped by udev are not public API and may change at any time. +Never call any private tool in /usr/lib/udev from any external application; it +might just go away in the next release. Access to udev information is only offered +by udevadm and libudev. Tools and rules in /usr/lib/udev and the entire contents +of the /run/udev directory are private to udev and do change whenever needed. + +Requirements: + - Version 2.6.34 of the Linux kernel with sysfs, procfs, signalfd, inotify, + unix domain sockets, networking and hotplug enabled + + - Some architectures might need a later kernel, that supports accept4(), + or need to backport the accept4() syscall wiring in the kernel. + + - These options are required: + CONFIG_DEVTMPFS=y + CONFIG_HOTPLUG=y + CONFIG_INOTIFY_USER=y + CONFIG_NET=y + CONFIG_PROC_FS=y + CONFIG_SIGNALFD=y + CONFIG_SYSFS=y + CONFIG_SYSFS_DEPRECATED*=n + CONFIG_UEVENT_HELPER_PATH="" + + - These options might be needed: + CONFIG_BLK_DEV_BSG=y (SCSI devices) + CONFIG_TMPFS_POSIX_ACL=y (user ACLs for device nodes) + + - The /dev directory needs the 'devtmpfs' filesystem mounted. + Udev only manages the permissions and ownership of the + kernel-provided device nodes, and possibly creates additional symlinks. + + - Udev requires /run to be writable, which is usually done by mounting a + 'tmpfs' filesystem. + + - This version of udev does not work properly with the CONFIG_SYSFS_DEPRECATED* + option enabled. + + - The deprecated hotplug helper /sbin/hotplug should be disabled in the + kernel configuration, it is not needed today, and may render the system + unusable because the kernel may create too many processes in parallel + so that the system runs out-of-memory. + + - The proc filesystem must be mounted on /proc, and the sysfs filesystem must + be mounted at /sys. No other locations are supported by a standard + udev installation. + + - The default rule sset requires the following group names resolvable at udev startup: + disk, cdrom, floppy, tape, audio, video, lp, tty, dialout, and kmem. + Especially in LDAP setups, it is required that getgrnam() be able to resolve + these group names with only the rootfs mounted and while no network is + available. + + - Some udev extras have external dependencies like: + libglib2, usbutils, pciutils, and gperf. + All these extras can be disabled with configure options. + +Setup: + - The udev daemon should be started to handle device events sent by the kernel. + During bootup, the events for already existing devices can be replayed, so + that they are configured by udev. The systemd service files contain the + needed commands to start the udev daemon and the coldplug sequence. + + - Restarting the daemon never applies any rules to existing devices. + + - New/changed rule files are picked up automatically; there is usually no + daemon restart or signal needed. + +Operation: + - Based on events the kernel sends out on device creation/removal, udev + creates/removes device nodes and symlinks in the /dev directory. + + - All kernel events are matched against a set of specified rules, which + possibly hook into the event processing and load required kernel + modules to set up devices. For all devices, the kernel exports a major/minor + number; if needed, udev creates a device node with the default kernel + device name. If specified, udev applies permissions/ownership to the device + node, creates additional symlinks pointing to the node, and executes + programs to handle the device. + + - The events udev handles, and the information udev merges into its device + database, can be accessed with libudev: + http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/ + http://www.kernel.org/pub/linux/utils/kernel/hotplug/gudev/ + +For more details about udev and udev rules, see the udev man pages: + http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev/ + +Please direct any comment/question to the linux-hotplug mailing list at: + linux-hotplug@vger.kernel.org diff --git a/src/udev/TODO b/src/udev/TODO new file mode 100644 index 000000000..8b8b9c8f8 --- /dev/null +++ b/src/udev/TODO @@ -0,0 +1,22 @@ + - find a way to tell udev to not cancel firmware + requests in initramfs + + - scsi_id -> sg3_utils? + + - make gtk-doc optional like kmod + + - move /usr/lib/udev/devices/ to tmpfiles + + - trigger --subsystem-match=usb/usb_device + + - kill rules_generator + + - have a $attrs{} ? + + - remove RUN+="socket:" + + - libudev.so.1 + - symbol versioning + - return object with *_unref() + - udev_monitor_from_socket() + - udev_queue_get_failed_list_entry() diff --git a/src/udev/autogen.sh b/src/udev/autogen.sh new file mode 100755 index 000000000..55ee03afd --- /dev/null +++ b/src/udev/autogen.sh @@ -0,0 +1,44 @@ +#!/bin/sh -e + +if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then + cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \ + chmod +x .git/hooks/pre-commit && \ + echo "Activated pre-commit hook." +fi + +gtkdocize +autoreconf --install --symlink + +libdir() { + echo $(cd $1/$(gcc -print-multi-os-directory); pwd) +} + +args="$args \ +--prefix=/usr \ +--sysconfdir=/etc \ +--libdir=$(libdir /usr/lib) \ +--with-selinux \ +--enable-gtk-doc" + +if [ -L /bin ]; then +args="$args \ +--libexecdir=/usr/lib \ +--with-systemdsystemunitdir=/usr/lib/systemd/system \ +" +else +args="$args \ +--with-rootprefix= \ +---with-rootlibdir=$(libdir /lib) \ +--bindir=/sbin \ +--libexecdir=/lib \ +--with-systemdsystemunitdir=/lib/systemd/system \ +" +fi + +echo +echo "----------------------------------------------------------------" +echo "Initialized build system. For a common configuration please run:" +echo "----------------------------------------------------------------" +echo +echo "./configure CFLAGS='-g -O1' $args" +echo diff --git a/src/udev/configure.ac b/src/udev/configure.ac new file mode 100644 index 000000000..b31b62f28 --- /dev/null +++ b/src/udev/configure.ac @@ -0,0 +1,242 @@ +AC_PREREQ(2.60) +AC_INIT([udev], + [182], + [linux-hotplug@vger.kernel.org], + [udev], + [http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html]) +AC_CONFIG_SRCDIR([src/udevd.c]) +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE([check-news foreign 1.11 -Wall -Wno-portability silent-rules tar-pax no-dist-gzip dist-xz subdir-objects]) +AC_USE_SYSTEM_EXTENSIONS +AC_SYS_LARGEFILE +AC_CONFIG_MACRO_DIR([m4]) +AM_SILENT_RULES([yes]) +LT_INIT([disable-static]) +AC_PROG_AWK +AC_PROG_SED +AC_PROG_MKDIR_P +GTK_DOC_CHECK(1.10) +AC_PREFIX_DEFAULT([/usr]) + +AC_PATH_PROG([XSLTPROC], [xsltproc]) +AM_CONDITIONAL(HAVE_XSLTPROC, test x"$XSLTPROC" != x) + +AC_SEARCH_LIBS([clock_gettime], [rt], [], [AC_MSG_ERROR([POSIX RT library not found])]) + +PKG_CHECK_MODULES(BLKID, blkid >= 2.20) + +PKG_CHECK_MODULES(KMOD, libkmod >= 5) + +AC_ARG_WITH([rootprefix], + AS_HELP_STRING([--with-rootprefix=DIR], [rootfs directory prefix for config files and kernel modules]), + [], [with_rootprefix=${ac_default_prefix}]) +AC_SUBST([rootprefix], [$with_rootprefix]) + +AC_ARG_WITH([rootlibdir], + AS_HELP_STRING([--with-rootlibdir=DIR], [rootfs directory to install shared libraries]), + [], [with_rootlibdir=$libdir]) +AC_SUBST([rootlib_execdir], [$with_rootlibdir]) + +AC_ARG_WITH([selinux], + AS_HELP_STRING([--with-selinux], [enable SELinux support]), + [], [with_selinux=no]) +AS_IF([test "x$with_selinux" = "xyes"], [ + LIBS_save=$LIBS + AC_CHECK_LIB(selinux, getprevcon, + [], + AC_MSG_ERROR([SELinux selected but libselinux not found])) + LIBS=$LIBS_save + SELINUX_LIBS="-lselinux -lsepol" + AC_DEFINE(WITH_SELINUX, [1] ,[SELinux support.]) +]) +AC_SUBST([SELINUX_LIBS]) +AM_CONDITIONAL(WITH_SELINUX, [test "x$with_selinux" = "xyes"]) + +AC_ARG_ENABLE([debug], + AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]), + [], [enable_debug=no]) +AS_IF([test "x$enable_debug" = "xyes"], [ AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.]) ]) + +AC_ARG_ENABLE([logging], + AS_HELP_STRING([--disable-logging], [disable system logging @<:@default=enabled@:>@]), + [], enable_logging=yes) +AS_IF([test "x$enable_logging" = "xyes"], [ AC_DEFINE(ENABLE_LOGGING, [1], [System logging.]) ]) + +AC_ARG_ENABLE([manpages], + AS_HELP_STRING([--disable-manpages], [disable man pages @<:@default=enabled@:>@]), + [], enable_manpages=yes) +AM_CONDITIONAL([ENABLE_MANPAGES], [test "x$enable_manpages" = "xyes"]) + +if test "x$cross_compiling" = "xno" ; then + AC_CHECK_FILES([/usr/share/pci.ids], [pciids=/usr/share/pci.ids]) + AC_CHECK_FILES([/usr/share/hwdata/pci.ids], [pciids=/usr/share/hwdata/pci.ids]) + AC_CHECK_FILES([/usr/share/misc/pci.ids], [pciids=/usr/share/misc/pci.ids]) +fi + +AC_ARG_WITH(usb-ids-path, + [AS_HELP_STRING([--with-usb-ids-path=DIR], [Path to usb.ids file])], + [USB_DATABASE=${withval}], + [if test -n "$usbids" ; then + USB_DATABASE="$usbids" + else + PKG_CHECK_MODULES(USBUTILS, usbutils >= 0.82) + AC_SUBST([USB_DATABASE], [$($PKG_CONFIG --variable=usbids usbutils)]) + fi]) +AC_MSG_CHECKING([for USB database location]) +AC_MSG_RESULT([$USB_DATABASE]) +AC_SUBST(USB_DATABASE) + +AC_ARG_WITH(pci-ids-path, + [AS_HELP_STRING([--with-pci-ids-path=DIR], [Path to pci.ids file])], + [PCI_DATABASE=${withval}], + [if test -n "$pciids" ; then + PCI_DATABASE="$pciids" + else + AC_MSG_ERROR([pci.ids not found, try --with-pci-ids-path=]) + fi]) +AC_MSG_CHECKING([for PCI database location]) +AC_MSG_RESULT([$PCI_DATABASE]) +AC_SUBST(PCI_DATABASE) + +AC_ARG_WITH(firmware-path, + AS_HELP_STRING([--with-firmware-path=DIR[[[:DIR[...]]]]], + [Firmware search path (default=ROOTPREFIX/lib/firmware/updates:ROOTPREFIX/lib/firmware)]), + [], [with_firmware_path="$rootprefix/lib/firmware/updates:$rootprefix/lib/firmware"]) +OLD_IFS=$IFS +IFS=: +for i in $with_firmware_path; do + if test "x${FIRMWARE_PATH}" = "x"; then + FIRMWARE_PATH="\\\"${i}/\\\"" + else + FIRMWARE_PATH="${FIRMWARE_PATH}, \\\"${i}/\\\"" + fi +done +IFS=$OLD_IFS +AC_SUBST([FIRMWARE_PATH], [$FIRMWARE_PATH]) + +AC_ARG_WITH([systemdsystemunitdir], + AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]), + [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)]) +AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) ]) +AM_CONDITIONAL(WITH_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != "xno" ]) + +# ------------------------------------------------------------------------------ +# GUdev - libudev gobject interface +# ------------------------------------------------------------------------------ +AC_ARG_ENABLE([gudev], + AS_HELP_STRING([--disable-gudev], [disable Gobject libudev support @<:@default=enabled@:>@]), + [], [enable_gudev=yes]) +AS_IF([test "x$enable_gudev" = "xyes"], [ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0]) ]) + +AC_ARG_ENABLE([introspection], + AS_HELP_STRING([--disable-introspection], [disable GObject introspection @<:@default=enabled@:>@]), + [], [enable_introspection=yes]) +AS_IF([test "x$enable_introspection" = "xyes"], [ + PKG_CHECK_MODULES([INTROSPECTION], [gobject-introspection-1.0 >= 0.6.2]) + AC_DEFINE([ENABLE_INTROSPECTION], [1], [enable GObject introspection support]) + AC_SUBST([G_IR_SCANNER], [$($PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0)]) + AC_SUBST([G_IR_COMPILER], [$($PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0)]) + AC_SUBST([G_IR_GENERATE], [$($PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0)]) + AC_SUBST([GIRDIR], [$($PKG_CONFIG --define-variable=datadir=${datadir} --variable=girdir gobject-introspection-1.0)]) + AC_SUBST([GIRTYPELIBDIR], [$($PKG_CONFIG --define-variable=libdir=${libdir} --variable=typelibdir gobject-introspection-1.0)]) +]) +AM_CONDITIONAL([ENABLE_INTROSPECTION], [test "x$enable_introspection" = "xyes"]) +AM_CONDITIONAL([ENABLE_GUDEV], [test "x$enable_gudev" = "xyes"]) + +# ------------------------------------------------------------------------------ +# keymap - map custom hardware's multimedia keys +# ------------------------------------------------------------------------------ +AC_ARG_ENABLE([keymap], + AS_HELP_STRING([--disable-keymap], [disable keymap fixup support @<:@default=enabled@:>@]), + [], [enable_keymap=yes]) +AS_IF([test "x$enable_keymap" = "xyes"], [ + AC_PATH_PROG([GPERF], [gperf]) + if test -z "$GPERF"; then + AC_MSG_ERROR([gperf is needed]) + fi + + AC_CHECK_HEADER([linux/input.h], [:], AC_MSG_ERROR([kernel headers not found])) + AC_SUBST([INCLUDE_PREFIX], [$(echo '#include <linux/input.h>' | eval $ac_cpp -E - | sed -n '/linux\/input.h/ {s:.*"\(.*\)/linux/input.h".*:\1:; p; q}')]) +]) +AM_CONDITIONAL([ENABLE_KEYMAP], [test "x$enable_keymap" = "xyes"]) + +# ------------------------------------------------------------------------------ +# mtd_probe - autoloads FTL module for mtd devices +# ------------------------------------------------------------------------------ +AC_ARG_ENABLE([mtd_probe], + AS_HELP_STRING([--disable-mtd_probe], [disable MTD support @<:@default=enabled@:>@]), + [], [enable_mtd_probe=yes]) +AM_CONDITIONAL([ENABLE_MTD_PROBE], [test "x$enable_mtd_probe" = "xyes"]) + +# ------------------------------------------------------------------------------ +# rule_generator - persistent network and optical device rule generator +# ------------------------------------------------------------------------------ +AC_ARG_ENABLE([rule_generator], + AS_HELP_STRING([--enable-rule_generator], [enable persistent network + cdrom links support @<:@default=disabled@:>@]), + [], [enable_rule_generator=no]) +AM_CONDITIONAL([ENABLE_RULE_GENERATOR], [test "x$enable_rule_generator" = "xyes"]) + +# ------------------------------------------------------------------------------ +# create_floppy_devices - historical floppy kernel device nodes (/dev/fd0h1440, ...) +# ------------------------------------------------------------------------------ +AC_ARG_ENABLE([floppy], + AS_HELP_STRING([--enable-floppy], [enable legacy floppy support @<:@default=disabled@:>@]), + [], [enable_floppy=no]) +AM_CONDITIONAL([ENABLE_FLOPPY], [test "x$enable_floppy" = "xyes"]) + +my_CFLAGS="-Wall \ +-Wmissing-declarations -Wmissing-prototypes \ +-Wnested-externs -Wpointer-arith \ +-Wpointer-arith -Wsign-compare -Wchar-subscripts \ +-Wstrict-prototypes -Wshadow \ +-Wformat-security -Wtype-limits" +AC_SUBST([my_CFLAGS]) + +AC_CONFIG_HEADERS(config.h) +AC_CONFIG_FILES([ + Makefile + src/docs/Makefile + src/docs/version.xml + src/gudev/docs/Makefile + src/gudev/docs/version.xml +]) + +AC_OUTPUT +AC_MSG_RESULT([ + $PACKAGE $VERSION + ======== + + prefix: ${prefix} + rootprefix: ${rootprefix} + sysconfdir: ${sysconfdir} + bindir: ${bindir} + libdir: ${libdir} + rootlibdir: ${rootlib_execdir} + libexecdir: ${libexecdir} + datarootdir: ${datarootdir} + mandir: ${mandir} + includedir: ${includedir} + include_prefix: ${INCLUDE_PREFIX} + systemdsystemunitdir: ${systemdsystemunitdir} + firmware path: ${FIRMWARE_PATH} + usb.ids: ${USB_DATABASE} + pci.ids: ${PCI_DATABASE} + + compiler: ${CC} + cflags: ${CFLAGS} + ldflags: ${LDFLAGS} + xsltproc: ${XSLTPROC} + gperf: ${GPERF} + + logging: ${enable_logging} + debug: ${enable_debug} + selinux: ${with_selinux} + + man pages ${enable_manpages} + gudev: ${enable_gudev} + gintrospection: ${enable_introspection} + keymap: ${enable_keymap} + mtd_probe: ${enable_mtd_probe} + rule_generator: ${enable_rule_generator} + floppy: ${enable_floppy} +]) diff --git a/src/udev/m4/.gitignore b/src/udev/m4/.gitignore new file mode 100644 index 000000000..0ca2c0372 --- /dev/null +++ b/src/udev/m4/.gitignore @@ -0,0 +1,4 @@ +libtool.m4 +lt*m4 +gtk-doc.m4 + diff --git a/src/udev/rules/42-usb-hid-pm.rules b/src/udev/rules/42-usb-hid-pm.rules new file mode 100644 index 000000000..d5d5897c3 --- /dev/null +++ b/src/udev/rules/42-usb-hid-pm.rules @@ -0,0 +1,49 @@ +# +# Enable autosuspend for qemu emulated usb hid devices. +# +# Note that there are buggy qemu versions which advertise remote +# wakeup support but don't actually implement it correctly. This +# is the reason why we need a match for the serial number here. +# The serial number "42" is used to tag the implementations where +# remote wakeup is working. +# + +ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Mouse", ATTR{serial}=="42", TEST=="power/control", ATTR{power/control}="auto" +ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Tablet", ATTR{serial}=="42", TEST=="power/control", ATTR{power/control}="auto" +ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Keyboard", ATTR{serial}=="42", TEST=="power/control", ATTR{power/control}="auto" + +# +# Enable autosuspend for KVM and iLO usb hid devices. These are +# effectively self-powered (despite what some claim in their USB +# profiles) and so it's safe to do so. +# + +# AMI 046b:ff10 +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="046b", ATTR{idProduct}=="ff10", TEST=="power/control", ATTR{power/control}="auto" + +# +# Catch-all for Avocent HID devices. Keyed off interface in order to only +# trigger on HID class devices. +# +ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0624", ATTR{bInterfaceClass}=="03", TEST=="../power/control", ATTR{../power/control}="auto" + +# Dell DRAC 4 +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="413c", ATTR{idProduct}=="2500", TEST=="power/control", ATTR{power/control}="auto" + +# Dell DRAC 5 +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="413c", ATTR{idProduct}=="0000", TEST=="power/control", ATTR{power/control}="auto" + +# Hewlett Packard iLO +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="7029", TEST=="power/control", ATTR{power/control}="auto" +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", ATTR{idProduct}=="1027", TEST=="power/control", ATTR{power/control}="auto" + +# IBM remote access +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="04b3", ATTR{idProduct}=="4001", TEST=="power/control", ATTR{power/control}="auto" +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="04b3", ATTR{idProduct}=="4002", TEST=="power/control", ATTR{power/control}="auto" +ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="04b3", ATTR{idProduct}=="4012", TEST=="power/control", ATTR{power/control}="auto" + +# Raritan Computer, Inc KVM. +ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="14dd", ATTR{idProduct}="0002", TEST=="power/control", ATTR{power/control}="auto" + +# USB HID devices that are internal to the machine should also be safe to autosuspend +ACTION=="add", SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", ATTRS{removable}=="fixed", TEST=="../power/control", ATTR{../power/control}="auto" diff --git a/src/udev/rules/50-udev-default.rules b/src/udev/rules/50-udev-default.rules new file mode 100644 index 000000000..5ad787fc7 --- /dev/null +++ b/src/udev/rules/50-udev-default.rules @@ -0,0 +1,107 @@ +# do not edit this file, it will be overwritten on update + +KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660" +KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660" +KERNEL=="ptmx", GROUP="tty", MODE="0666" +KERNEL=="tty", GROUP="tty", MODE="0666" +KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620" +KERNEL=="vcs|vcs[0-9]*|vcsa|vcsa[0-9]*", GROUP="tty" + +# serial +KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout" +KERNEL=="mwave", GROUP="dialout" +KERNEL=="hvc*|hvsi*", GROUP="dialout" + +# virtio serial / console ports +KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}" + +# mem +KERNEL=="null|zero|full|random|urandom", MODE="0666" +KERNEL=="mem|kmem|port|nvram", GROUP="kmem", MODE="0640" + +# input +SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id" +KERNEL=="mouse*|mice|event*", MODE="0640" +KERNEL=="ts[0-9]*|uinput", MODE="0640" +KERNEL=="js[0-9]*", MODE="0644" + +# video4linux +SUBSYSTEM=="video4linux", GROUP="video" +KERNEL=="vttuner*", GROUP="video" +KERNEL=="vtx*|vbi*", GROUP="video" +KERNEL=="winradio*", GROUP="video" + +# graphics +KERNEL=="agpgart", GROUP="video" +KERNEL=="pmu", GROUP="video" +KERNEL=="nvidia*|nvidiactl*", GROUP="video" +SUBSYSTEM=="graphics", GROUP="video" +SUBSYSTEM=="drm", GROUP="video" + +# sound +SUBSYSTEM=="sound", GROUP="audio", \ + OPTIONS+="static_node=snd/seq", OPTIONS+="static_node=snd/timer" + +# DVB (video) +SUBSYSTEM=="dvb", GROUP="video" + +# FireWire (firewire-core driver: IIDC devices, AV/C devices) +SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x00010*", GROUP="video" +SUBSYSTEM=="firewire", ATTR{units}=="*0x00b09d:0x00010*", GROUP="video" +SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x010001*", GROUP="video" +SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x014001*", GROUP="video" + +# 'libusb' device nodes +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664" +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id" + +# printer +KERNEL=="parport[0-9]*", GROUP="lp" +SUBSYSTEM=="printer", KERNEL=="lp*", GROUP="lp" +SUBSYSTEM=="ppdev", GROUP="lp" +KERNEL=="lp[0-9]*", GROUP="lp" +KERNEL=="irlpt[0-9]*", GROUP="lp" +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", GROUP="lp" + +# block +SUBSYSTEM=="block", GROUP="disk" + +# floppy +SUBSYSTEM=="block", KERNEL=="fd[0-9]", GROUP="floppy" + +# cdrom +SUBSYSTEM=="block", KERNEL=="sr[0-9]*", GROUP="cdrom" +SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="cdrom" +KERNEL=="pktcdvd[0-9]*", GROUP="cdrom" +KERNEL=="pktcdvd", GROUP="cdrom" + +# tape +KERNEL=="ht[0-9]*|nht[0-9]*", GROUP="tape" +KERNEL=="pt[0-9]*|npt[0-9]*|pht[0-9]*", GROUP="tape" +SUBSYSTEM=="scsi_generic|scsi_tape", SUBSYSTEMS=="scsi", ATTRS{type}=="1|8", GROUP="tape" + +# block-related +KERNEL=="sch[0-9]*", GROUP="disk" +SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="0", GROUP="disk" +KERNEL=="pg[0-9]*", GROUP="disk" +KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk" +KERNEL=="rawctl", GROUP="disk" +SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk" +SUBSYSTEM=="aoe", GROUP="disk", MODE="0220" +SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440" + +# network +KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun" +KERNEL=="rfkill", MODE="0644" + +# CPU +KERNEL=="cpu[0-9]*", MODE="0444" + +KERNEL=="fuse", ACTION=="add", MODE="0666", OPTIONS+="static_node=fuse" + +SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc" +KERNEL=="mmtimer", MODE="0644" +KERNEL=="rflash[0-9]*", MODE="0400" +KERNEL=="rrom[0-9]*", MODE="0400" + +SUBSYSTEM=="firmware", ACTION=="add", IMPORT{builtin}="firmware" diff --git a/src/udev/rules/60-persistent-alsa.rules b/src/udev/rules/60-persistent-alsa.rules new file mode 100644 index 000000000..8154e2dbb --- /dev/null +++ b/src/udev/rules/60-persistent-alsa.rules @@ -0,0 +1,14 @@ +# 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" diff --git a/src/udev/rules/60-persistent-input.rules b/src/udev/rules/60-persistent-input.rules new file mode 100644 index 000000000..fb798ddb0 --- /dev/null +++ b/src/udev/rules/60-persistent-input.rules @@ -0,0 +1,38 @@ +# 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", GOTO="persistent_input_end" + +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}=="?*", 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}=="?*", 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 and usb devices; platform supports only a single interface that way +SUBSYSTEMS=="usb|platform", ENV{ID_PATH}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="", \ + SYMLINK+="input/by-path/$env{ID_PATH}-event" + +LABEL="persistent_input_end" diff --git a/src/udev/rules/60-persistent-serial.rules b/src/udev/rules/60-persistent-serial.rules new file mode 100644 index 000000000..2948200c5 --- /dev/null +++ b/src/udev/rules/60-persistent-serial.rules @@ -0,0 +1,20 @@ +# do not edit this file, it will be overwritten on update + +ACTION=="remove", GOTO="persistent_serial_end" +SUBSYSTEM!="tty", GOTO="persistent_serial_end" +KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="persistent_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}" + +IMPORT{builtin}="usb_id" +ENV{ID_SERIAL}=="", GOTO="persistent_serial_end" +SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACE_NUM}="$attr{bInterfaceNumber}" +ENV{ID_USB_INTERFACE_NUM}=="", GOTO="persistent_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="persistent_serial_end" diff --git a/src/udev/rules/60-persistent-storage-tape.rules b/src/udev/rules/60-persistent-storage-tape.rules new file mode 100644 index 000000000..f2eabd92a --- /dev/null +++ b/src/udev/rules/60-persistent-storage-tape.rules @@ -0,0 +1,25 @@ +# 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" + +# 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}" + +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}" +KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_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" diff --git a/src/udev/rules/60-persistent-storage.rules b/src/udev/rules/60-persistent-storage.rules new file mode 100644 index 000000000..b74821edd --- /dev/null +++ b/src/udev/rules/60-persistent-storage.rules @@ -0,0 +1,89 @@ +# 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> + +# forward scsi device event to corresponding block device +ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" + +ACTION=="remove", GOTO="persistent_storage_end" + +# enable in-kernel media-presence polling +ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000" + +SUBSYSTEM!="block", GOTO="persistent_storage_end" + +# skip rules for inappropriate block devices +KERNEL=="fd*|mtd*|nbd*|gnbd*|btibm*|dm-*|md*", GOTO="persistent_storage_end" + +# ignore partitions that span the entire disk +TEST=="whole_disk", GOTO="persistent_storage_end" + +# for partitions import parent information +ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*" + +# 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 devices with their own "ata" kernel subsystem +KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="ata", IMPORT{program}="ata_id --export $devnode" +# ATA devices using the "scsi" subsystem +KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", ATTRS{vendor}=="ATA", IMPORT{program}="ata_id --export $devnode" +# ATA/ATAPI devices (SPC-3 or later) using the "scsi" subsystem +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" +# Otherwise fall back to using usb_id for USB devices +KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", 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" + +# 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" + +KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{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" +KERNEL=="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=="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 (parent device path) +ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id" +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" + +# skip unpartitioned removable media devices from drivers which do not send "change" events +ENV{DEVTYPE}=="disk", KERNEL!="sd*|sr*", ATTR{removable}=="1", GOTO="persistent_storage_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 --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*", IMPORT{builtin}="blkid" + +# watch metadata changes by tools closing the device after writing +KERNEL!="sr*", OPTIONS+="watch" + +# 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", 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_SCHEME}=="gpt", 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}" + +LABEL="persistent_storage_end" diff --git a/src/udev/rules/75-net-description.rules b/src/udev/rules/75-net-description.rules new file mode 100644 index 000000000..ce57d48e8 --- /dev/null +++ b/src/udev/rules/75-net-description.rules @@ -0,0 +1,14 @@ +# do not edit this file, it will be overwritten on update + +ACTION=="remove", GOTO="net_end" +SUBSYSTEM!="net", GOTO="net_end" + +SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{builtin}="usb_id" +SUBSYSTEMS=="usb", IMPORT{builtin}="usb-db" +SUBSYSTEMS=="usb", ATTRS{idVendor}!="", ATTRS{idProduct}!="", ENV{ID_VENDOR_ID}="$attr{idVendor}", ENV{ID_MODEL_ID}="$attr{idProduct}" +SUBSYSTEMS=="usb", GOTO="net_end" + +SUBSYSTEMS=="pci", IMPORT{builtin}="pci-db" +SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" + +LABEL="net_end" diff --git a/src/udev/rules/75-tty-description.rules b/src/udev/rules/75-tty-description.rules new file mode 100644 index 000000000..2e63e140c --- /dev/null +++ b/src/udev/rules/75-tty-description.rules @@ -0,0 +1,14 @@ +# do not edit this file, it will be overwritten on update + +ACTION=="remove", GOTO="tty_end" +SUBSYSTEM!="tty", GOTO="tty_end" + +SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{builtin}="usb_id" +SUBSYSTEMS=="usb", IMPORT{builtin}="usb-db" +SUBSYSTEMS=="usb", ATTRS{idVendor}!="", ATTRS{idProduct}!="", ENV{ID_VENDOR_ID}="$attr{idVendor}", ENV{ID_MODEL_ID}="$attr{idProduct}" +SUBSYSTEMS=="usb", GOTO="tty_end" + +SUBSYSTEMS=="pci", IMPORT{builtin}="pci-db" +SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" + +LABEL="tty_end" diff --git a/src/udev/rules/78-sound-card.rules b/src/udev/rules/78-sound-card.rules new file mode 100644 index 000000000..e56444189 --- /dev/null +++ b/src/udev/rules/78-sound-card.rules @@ -0,0 +1,89 @@ +# 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" + +SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" +SUBSYSTEMS=="usb", IMPORT{builtin}="usb-db" +SUBSYSTEMS=="usb", GOTO="skip_pci" + +SUBSYSTEMS=="firewire", ATTRS{vendor_name}=="?*", ATTRS{model_name}=="?*", \ + ENV{ID_BUS}="firewire", ENV{ID_VENDOR}="$attr{vendor_name}", ENV{ID_MODEL}="$attr{model_name}" +SUBSYSTEMS=="firewire", ATTRS{guid}=="?*", ENV{ID_ID}="firewire-$attr{guid}" +SUBSYSTEMS=="firewire", GOTO="skip_pci" + + +SUBSYSTEMS=="pci", IMPORT{builtin}="pci-db" +SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" + +LABEL="skip_pci" + +ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}-$attr{id}" +ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$attr{id}" + +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" diff --git a/src/udev/rules/80-drivers.rules b/src/udev/rules/80-drivers.rules new file mode 100644 index 000000000..38ebfeb0e --- /dev/null +++ b/src/udev/rules/80-drivers.rules @@ -0,0 +1,12 @@ +# do not edit this file, it will be overwritten on update + +ACTION=="remove", GOTO="drivers_end" + +DRIVER!="?*", ENV{MODALIAS}=="?*", IMPORT{builtin}="kmod load $env{MODALIAS}" +SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", IMPORT{builtin}="kmod load tifm_sd" +SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", IMPORT{builtin}="kmod load tifm_ms" +SUBSYSTEM=="memstick", IMPORT{builtin}="kmod load ms_block mspro_block" +SUBSYSTEM=="i2o", IMPORT{builtin}="kmod load i2o_block" +SUBSYSTEM=="module", KERNEL=="parport_pc", IMPORT{builtin}="kmod load ppdev" + +LABEL="drivers_end" diff --git a/src/udev/rules/95-udev-late.rules b/src/udev/rules/95-udev-late.rules new file mode 100644 index 000000000..eca0faa5c --- /dev/null +++ b/src/udev/rules/95-udev-late.rules @@ -0,0 +1,4 @@ +# do not edit this file, it will be overwritten on update + +# run a command on remove events +ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}" diff --git a/src/udev/src/.gitignore b/src/udev/src/.gitignore new file mode 100644 index 000000000..beb8604bc --- /dev/null +++ b/src/udev/src/.gitignore @@ -0,0 +1,5 @@ +*.[78] +*.html +udev.pc +libudev.pc +udev*.service diff --git a/src/udev/src/COPYING b/src/udev/src/COPYING new file mode 100644 index 000000000..d2e31278b --- /dev/null +++ b/src/udev/src/COPYING @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library 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. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/src/udev/src/accelerometer/61-accelerometer.rules b/src/udev/src/accelerometer/61-accelerometer.rules new file mode 100644 index 000000000..a6a2bfd08 --- /dev/null +++ b/src/udev/src/accelerometer/61-accelerometer.rules @@ -0,0 +1,3 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM=="input", ACTION!="remove", ENV{ID_INPUT_ACCELEROMETER}=="1", IMPORT{program}="accelerometer %p" diff --git a/src/udev/src/accelerometer/accelerometer.c b/src/udev/src/accelerometer/accelerometer.c new file mode 100644 index 000000000..bc9715b26 --- /dev/null +++ b/src/udev/src/accelerometer/accelerometer.c @@ -0,0 +1,357 @@ +/* + * accelerometer - exports device orientation through property + * + * When an "change" event is received on an accelerometer, + * open its device node, and from the value, as well as the previous + * value of the property, calculate the device's new orientation, + * and export it as ID_INPUT_ACCELEROMETER_ORIENTATION. + * + * Possible values are: + * undefined + * * normal + * * bottom-up + * * left-up + * * right-up + * + * The property will be persistent across sessions, and the new + * orientations can be deducted from the previous one (it allows + * for a threshold for switching between opposite ends of the + * orientation). + * + * Copyright (C) 2011 Red Hat, Inc. + * Author: + * Bastien Nocera <hadess@hadess.net> + * + * orientation_calc() from the sensorfw package + * Copyright (C) 2009-2010 Nokia Corporation + * Authors: + * Üstün Ergenoglu <ext-ustun.ergenoglu@nokia.com> + * Timo Rongas <ext-timo.2.rongas@nokia.com> + * Lihan Guo <lihan.guo@digia.com> + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with keymap; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#include <stdio.h> +#include <string.h> +#include <math.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <stdlib.h> +#include <unistd.h> +#include <getopt.h> +#include <limits.h> +#include <linux/limits.h> +#include <linux/input.h> + +#include "libudev.h" +#include "libudev-private.h" + +/* we must use this kernel-compatible implementation */ +#define BITS_PER_LONG (sizeof(unsigned long) * 8) +#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) +#define OFF(x) ((x)%BITS_PER_LONG) +#define BIT(x) (1UL<<OFF(x)) +#define LONG(x) ((x)/BITS_PER_LONG) +#define test_bit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1) + +static int debug = 0; + +static void log_fn(struct udev *udev, int priority, + const char *file, int line, const char *fn, + const char *format, va_list args) +{ + if (debug) { + fprintf(stderr, "%s: ", fn); + vfprintf(stderr, format, args); + } else { + vsyslog(priority, format, args); + } +} + +typedef enum { + ORIENTATION_UNDEFINED, + ORIENTATION_NORMAL, + ORIENTATION_BOTTOM_UP, + ORIENTATION_LEFT_UP, + ORIENTATION_RIGHT_UP +} OrientationUp; + +static const char *orientations[] = { + "undefined", + "normal", + "bottom-up", + "left-up", + "right-up", + NULL +}; + +#define ORIENTATION_UP_UP ORIENTATION_NORMAL + +#define DEFAULT_THRESHOLD 250 +#define RADIANS_TO_DEGREES 180.0/M_PI +#define SAME_AXIS_LIMIT 5 + +#define THRESHOLD_LANDSCAPE 25 +#define THRESHOLD_PORTRAIT 20 + +static const char * +orientation_to_string (OrientationUp o) +{ + return orientations[o]; +} + +static OrientationUp +string_to_orientation (const char *orientation) +{ + int i; + + if (orientation == NULL) + return ORIENTATION_UNDEFINED; + for (i = 0; orientations[i] != NULL; i++) { + if (strcmp (orientation, orientations[i]) == 0) + return i; + } + return ORIENTATION_UNDEFINED; +} + +static OrientationUp +orientation_calc (OrientationUp prev, + int x, int y, int z) +{ + int rotation; + OrientationUp ret = prev; + + /* Portrait check */ + rotation = round(atan((double) x / sqrt(y * y + z * z)) * RADIANS_TO_DEGREES); + + if (abs(rotation) > THRESHOLD_PORTRAIT) { + ret = (rotation < 0) ? ORIENTATION_LEFT_UP : ORIENTATION_RIGHT_UP; + + /* Some threshold to switching between portrait modes */ + if (prev == ORIENTATION_LEFT_UP || prev == ORIENTATION_RIGHT_UP) { + if (abs(rotation) < SAME_AXIS_LIMIT) { + ret = prev; + } + } + + } else { + /* Landscape check */ + rotation = round(atan((double) y / sqrt(x * x + z * z)) * RADIANS_TO_DEGREES); + + if (abs(rotation) > THRESHOLD_LANDSCAPE) { + ret = (rotation < 0) ? ORIENTATION_BOTTOM_UP : ORIENTATION_NORMAL; + + /* Some threshold to switching between landscape modes */ + if (prev == ORIENTATION_BOTTOM_UP || prev == ORIENTATION_NORMAL) { + if (abs(rotation) < SAME_AXIS_LIMIT) { + ret = prev; + } + } + } + } + + return ret; +} + +static OrientationUp +get_prev_orientation(struct udev_device *dev) +{ + const char *value; + + value = udev_device_get_property_value(dev, "ID_INPUT_ACCELEROMETER_ORIENTATION"); + if (value == NULL) + return ORIENTATION_UNDEFINED; + return string_to_orientation(value); +} + +#define SET_AXIS(axis, code_) if (ev[i].code == code_) { if (got_##axis == 0) { axis = ev[i].value; got_##axis = 1; } } + +/* accelerometers */ +static void test_orientation(struct udev *udev, + struct udev_device *dev, + const char *devpath) +{ + OrientationUp old, new; + int fd, r; + struct input_event ev[64]; + int got_syn = 0; + int got_x, got_y, got_z; + int x = 0, y = 0, z = 0; + char text[64]; + + old = get_prev_orientation(dev); + + if ((fd = open(devpath, O_RDONLY)) < 0) + return; + + got_x = got_y = got_z = 0; + + while (1) { + int i; + + r = read(fd, ev, sizeof(struct input_event) * 64); + + if (r < (int) sizeof(struct input_event)) + return; + + for (i = 0; i < r / (int) sizeof(struct input_event); i++) { + if (got_syn == 1) { + if (ev[i].type == EV_ABS) { + SET_AXIS(x, ABS_X); + SET_AXIS(y, ABS_Y); + SET_AXIS(z, ABS_Z); + } + } + if (ev[i].type == EV_SYN && ev[i].code == SYN_REPORT) { + got_syn = 1; + } + if (got_x && got_y && got_z) + goto read_dev; + } + } + +read_dev: + close(fd); + + if (!got_x || !got_y || !got_z) + return; + + new = orientation_calc(old, x, y, z); + snprintf(text, sizeof(text), "ID_INPUT_ACCELEROMETER_ORIENTATION=%s", orientation_to_string(new)); + puts(text); +} + +static void help(void) +{ + printf("Usage: accelerometer [options] <device path>\n" + " --debug debug to stderr\n" + " --help print this help text\n\n"); +} + +int main (int argc, char** argv) +{ + struct udev *udev; + struct udev_device *dev; + + static const struct option options[] = { + { "debug", no_argument, NULL, 'd' }, + { "help", no_argument, NULL, 'h' }, + {} + }; + + char devpath[PATH_MAX]; + char *devnode; + const char *id_path; + struct udev_enumerate *enumerate; + struct udev_list_entry *list_entry; + + udev = udev_new(); + if (udev == NULL) + return 1; + + udev_log_init("input_id"); + udev_set_log_fn(udev, log_fn); + + /* CLI argument parsing */ + while (1) { + int option; + + option = getopt_long(argc, argv, "dxh", options, NULL); + if (option == -1) + break; + + switch (option) { + case 'd': + debug = 1; + if (udev_get_log_priority(udev) < LOG_INFO) + udev_set_log_priority(udev, LOG_INFO); + break; + case 'h': + help(); + exit(0); + default: + exit(1); + } + } + + if (argv[optind] == NULL) { + help(); + exit(1); + } + + /* get the device */ + snprintf(devpath, sizeof(devpath), "%s/%s", udev_get_sys_path(udev), argv[optind]); + dev = udev_device_new_from_syspath(udev, devpath); + if (dev == NULL) { + fprintf(stderr, "unable to access '%s'\n", devpath); + return 1; + } + + id_path = udev_device_get_property_value(dev, "ID_PATH"); + if (id_path == NULL) { + fprintf (stderr, "unable to get property ID_PATH for '%s'", devpath); + return 0; + } + + /* Get the children devices and find the devnode + * FIXME: use udev_enumerate_add_match_children() instead + * when it's available */ + devnode = NULL; + enumerate = udev_enumerate_new(udev); + udev_enumerate_add_match_property(enumerate, "ID_PATH", id_path); + udev_enumerate_add_match_subsystem(enumerate, "input"); + udev_enumerate_scan_devices(enumerate); + udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(enumerate)) { + struct udev_device *device; + const char *node; + + device = udev_device_new_from_syspath(udev_enumerate_get_udev(enumerate), + udev_list_entry_get_name(list_entry)); + if (device == NULL) + continue; + /* Already found it */ + if (devnode != NULL) { + udev_device_unref(device); + continue; + } + + node = udev_device_get_devnode(device); + if (node == NULL) { + udev_device_unref(device); + continue; + } + /* Use the event sub-device */ + if (strstr(node, "/event") == NULL) { + udev_device_unref(device); + continue; + } + + devnode = strdup(node); + udev_device_unref(device); + } + + if (devnode == NULL) { + fprintf(stderr, "unable to get device node for '%s'\n", devpath); + return 0; + } + + info(udev, "Opening accelerometer device %s\n", devnode); + test_orientation(udev, dev, devnode); + free(devnode); + + return 0; +} diff --git a/src/udev/src/ata_id/ata_id.c b/src/udev/src/ata_id/ata_id.c new file mode 100644 index 000000000..846a73b54 --- /dev/null +++ b/src/udev/src/ata_id/ata_id.c @@ -0,0 +1,721 @@ +/* + * ata_id - reads product/serial number from ATA drives + * + * Copyright (C) 2005-2008 Kay Sievers <kay.sievers@vrfy.org> + * Copyright (C) 2009 Lennart Poettering <lennart@poettering.net> + * Copyright (C) 2009-2010 David Zeuthen <zeuthen@gmail.com> + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <unistd.h> +#include <fcntl.h> +#include <ctype.h> +#include <assert.h> +#include <string.h> +#include <errno.h> +#include <getopt.h> +#include <scsi/scsi.h> +#include <scsi/sg.h> +#include <scsi/scsi_ioctl.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <linux/types.h> +#include <linux/hdreg.h> +#include <linux/fs.h> +#include <linux/cdrom.h> +#include <linux/bsg.h> +#include <arpa/inet.h> + +#include "libudev.h" +#include "libudev-private.h" + +#define COMMAND_TIMEOUT_MSEC (30 * 1000) + +static int disk_scsi_inquiry_command(int fd, + void *buf, + size_t buf_len) +{ + struct sg_io_v4 io_v4; + uint8_t cdb[6]; + uint8_t sense[32]; + int ret; + + /* + * INQUIRY, see SPC-4 section 6.4 + */ + memset(cdb, 0, sizeof(cdb)); + cdb[0] = 0x12; /* OPERATION CODE: INQUIRY */ + cdb[3] = (buf_len >> 8); /* ALLOCATION LENGTH */ + cdb[4] = (buf_len & 0xff); + + memset(sense, 0, sizeof(sense)); + + memset(&io_v4, 0, sizeof(struct sg_io_v4)); + io_v4.guard = 'Q'; + io_v4.protocol = BSG_PROTOCOL_SCSI; + io_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_CMD; + io_v4.request_len = sizeof (cdb); + io_v4.request = (uintptr_t) cdb; + io_v4.max_response_len = sizeof (sense); + io_v4.response = (uintptr_t) sense; + io_v4.din_xfer_len = buf_len; + io_v4.din_xferp = (uintptr_t) buf; + io_v4.timeout = COMMAND_TIMEOUT_MSEC; + + ret = ioctl(fd, SG_IO, &io_v4); + if (ret != 0) { + /* could be that the driver doesn't do version 4, try version 3 */ + if (errno == EINVAL) { + struct sg_io_hdr io_hdr; + + memset(&io_hdr, 0, sizeof(struct sg_io_hdr)); + io_hdr.interface_id = 'S'; + io_hdr.cmdp = (unsigned char*) cdb; + io_hdr.cmd_len = sizeof (cdb); + io_hdr.dxferp = buf; + io_hdr.dxfer_len = buf_len; + io_hdr.sbp = sense; + io_hdr.mx_sb_len = sizeof (sense); + io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; + io_hdr.timeout = COMMAND_TIMEOUT_MSEC; + + ret = ioctl(fd, SG_IO, &io_hdr); + if (ret != 0) + goto out; + + /* even if the ioctl succeeds, we need to check the return value */ + if (!(io_hdr.status == 0 && + io_hdr.host_status == 0 && + io_hdr.driver_status == 0)) { + errno = EIO; + ret = -1; + goto out; + } + } else { + goto out; + } + } + + /* even if the ioctl succeeds, we need to check the return value */ + if (!(io_v4.device_status == 0 && + io_v4.transport_status == 0 && + io_v4.driver_status == 0)) { + errno = EIO; + ret = -1; + goto out; + } + + out: + return ret; +} + +static int disk_identify_command(int fd, + void *buf, + size_t buf_len) +{ + struct sg_io_v4 io_v4; + uint8_t cdb[12]; + uint8_t sense[32]; + uint8_t *desc = sense+8; + int ret; + + /* + * ATA Pass-Through 12 byte command, as described in + * + * T10 04-262r8 ATA Command Pass-Through + * + * from http://www.t10.org/ftp/t10/document.04/04-262r8.pdf + */ + memset(cdb, 0, sizeof(cdb)); + cdb[0] = 0xa1; /* OPERATION CODE: 12 byte pass through */ + cdb[1] = 4 << 1; /* PROTOCOL: PIO Data-in */ + cdb[2] = 0x2e; /* OFF_LINE=0, CK_COND=1, T_DIR=1, BYT_BLOK=1, T_LENGTH=2 */ + cdb[3] = 0; /* FEATURES */ + cdb[4] = 1; /* SECTORS */ + cdb[5] = 0; /* LBA LOW */ + cdb[6] = 0; /* LBA MID */ + cdb[7] = 0; /* LBA HIGH */ + cdb[8] = 0 & 0x4F; /* SELECT */ + cdb[9] = 0xEC; /* Command: ATA IDENTIFY DEVICE */; + memset(sense, 0, sizeof(sense)); + + memset(&io_v4, 0, sizeof(struct sg_io_v4)); + io_v4.guard = 'Q'; + io_v4.protocol = BSG_PROTOCOL_SCSI; + io_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_CMD; + io_v4.request_len = sizeof (cdb); + io_v4.request = (uintptr_t) cdb; + io_v4.max_response_len = sizeof (sense); + io_v4.response = (uintptr_t) sense; + io_v4.din_xfer_len = buf_len; + io_v4.din_xferp = (uintptr_t) buf; + io_v4.timeout = COMMAND_TIMEOUT_MSEC; + + ret = ioctl(fd, SG_IO, &io_v4); + if (ret != 0) { + /* could be that the driver doesn't do version 4, try version 3 */ + if (errno == EINVAL) { + struct sg_io_hdr io_hdr; + + memset(&io_hdr, 0, sizeof(struct sg_io_hdr)); + io_hdr.interface_id = 'S'; + io_hdr.cmdp = (unsigned char*) cdb; + io_hdr.cmd_len = sizeof (cdb); + io_hdr.dxferp = buf; + io_hdr.dxfer_len = buf_len; + io_hdr.sbp = sense; + io_hdr.mx_sb_len = sizeof (sense); + io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; + io_hdr.timeout = COMMAND_TIMEOUT_MSEC; + + ret = ioctl(fd, SG_IO, &io_hdr); + if (ret != 0) + goto out; + } else { + goto out; + } + } + + if (!(sense[0] == 0x72 && desc[0] == 0x9 && desc[1] == 0x0c)) { + errno = EIO; + ret = -1; + goto out; + } + + out: + return ret; +} + +static int disk_identify_packet_device_command(int fd, + void *buf, + size_t buf_len) +{ + struct sg_io_v4 io_v4; + uint8_t cdb[16]; + uint8_t sense[32]; + uint8_t *desc = sense+8; + int ret; + + /* + * ATA Pass-Through 16 byte command, as described in + * + * T10 04-262r8 ATA Command Pass-Through + * + * from http://www.t10.org/ftp/t10/document.04/04-262r8.pdf + */ + memset(cdb, 0, sizeof(cdb)); + cdb[0] = 0x85; /* OPERATION CODE: 16 byte pass through */ + cdb[1] = 4 << 1; /* PROTOCOL: PIO Data-in */ + cdb[2] = 0x2e; /* OFF_LINE=0, CK_COND=1, T_DIR=1, BYT_BLOK=1, T_LENGTH=2 */ + cdb[3] = 0; /* FEATURES */ + cdb[4] = 0; /* FEATURES */ + cdb[5] = 0; /* SECTORS */ + cdb[6] = 1; /* SECTORS */ + cdb[7] = 0; /* LBA LOW */ + cdb[8] = 0; /* LBA LOW */ + cdb[9] = 0; /* LBA MID */ + cdb[10] = 0; /* LBA MID */ + cdb[11] = 0; /* LBA HIGH */ + cdb[12] = 0; /* LBA HIGH */ + cdb[13] = 0; /* DEVICE */ + cdb[14] = 0xA1; /* Command: ATA IDENTIFY PACKET DEVICE */; + cdb[15] = 0; /* CONTROL */ + memset(sense, 0, sizeof(sense)); + + memset(&io_v4, 0, sizeof(struct sg_io_v4)); + io_v4.guard = 'Q'; + io_v4.protocol = BSG_PROTOCOL_SCSI; + io_v4.subprotocol = BSG_SUB_PROTOCOL_SCSI_CMD; + io_v4.request_len = sizeof (cdb); + io_v4.request = (uintptr_t) cdb; + io_v4.max_response_len = sizeof (sense); + io_v4.response = (uintptr_t) sense; + io_v4.din_xfer_len = buf_len; + io_v4.din_xferp = (uintptr_t) buf; + io_v4.timeout = COMMAND_TIMEOUT_MSEC; + + ret = ioctl(fd, SG_IO, &io_v4); + if (ret != 0) { + /* could be that the driver doesn't do version 4, try version 3 */ + if (errno == EINVAL) { + struct sg_io_hdr io_hdr; + + memset(&io_hdr, 0, sizeof(struct sg_io_hdr)); + io_hdr.interface_id = 'S'; + io_hdr.cmdp = (unsigned char*) cdb; + io_hdr.cmd_len = sizeof (cdb); + io_hdr.dxferp = buf; + io_hdr.dxfer_len = buf_len; + io_hdr.sbp = sense; + io_hdr.mx_sb_len = sizeof (sense); + io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; + io_hdr.timeout = COMMAND_TIMEOUT_MSEC; + + ret = ioctl(fd, SG_IO, &io_hdr); + if (ret != 0) + goto out; + } else { + goto out; + } + } + + if (!(sense[0] == 0x72 && desc[0] == 0x9 && desc[1] == 0x0c)) { + errno = EIO; + ret = -1; + goto out; + } + + out: + return ret; +} + +/** + * disk_identify_get_string: + * @identify: A block of IDENTIFY data + * @offset_words: Offset of the string to get, in words. + * @dest: Destination buffer for the string. + * @dest_len: Length of destination buffer, in bytes. + * + * Copies the ATA string from @identify located at @offset_words into @dest. + */ +static void disk_identify_get_string(uint8_t identify[512], + unsigned int offset_words, + char *dest, + size_t dest_len) +{ + unsigned int c1; + unsigned int c2; + + assert(identify != NULL); + assert(dest != NULL); + assert((dest_len & 1) == 0); + + while (dest_len > 0) { + c1 = identify[offset_words * 2 + 1]; + c2 = identify[offset_words * 2]; + *dest = c1; + dest++; + *dest = c2; + dest++; + offset_words++; + dest_len -= 2; + } +} + +static void disk_identify_fixup_string(uint8_t identify[512], + unsigned int offset_words, + size_t len) +{ + disk_identify_get_string(identify, offset_words, + (char *) identify + offset_words * 2, len); +} + +static void disk_identify_fixup_uint16 (uint8_t identify[512], unsigned int offset_words) +{ + uint16_t *p; + + p = (uint16_t *) identify; + p[offset_words] = le16toh (p[offset_words]); +} + +/** + * disk_identify: + * @udev: The libudev context. + * @fd: File descriptor for the block device. + * @out_identify: Return location for IDENTIFY data. + * @out_is_packet_device: Return location for whether returned data is from a IDENTIFY PACKET DEVICE. + * + * Sends the IDENTIFY DEVICE or IDENTIFY PACKET DEVICE command to the + * device represented by @fd. If successful, then the result will be + * copied into @out_identify and @out_is_packet_device. + * + * This routine is based on code from libatasmart, Copyright 2008 + * Lennart Poettering, LGPL v2.1. + * + * Returns: 0 if the data was successfully obtained, otherwise + * non-zero with errno set. + */ +static int disk_identify(struct udev *udev, + int fd, + uint8_t out_identify[512], + int *out_is_packet_device) +{ + int ret; + uint8_t inquiry_buf[36]; + int peripheral_device_type; + int all_nul_bytes; + int n; + int is_packet_device; + + assert(out_identify != NULL); + + /* init results */ + ret = -1; + memset(out_identify, '\0', 512); + is_packet_device = 0; + + /* If we were to use ATA PASS_THROUGH (12) on an ATAPI device + * we could accidentally blank media. This is because MMC's BLANK + * command has the same op-code (0x61). + * + * To prevent this from happening we bail out if the device + * isn't a Direct Access Block Device, e.g. SCSI type 0x00 + * (CD/DVD devices are type 0x05). So we send a SCSI INQUIRY + * command first... libata is handling this via its SCSI + * emulation layer. + * + * This also ensures that we're actually dealing with a device + * that understands SCSI commands. + * + * (Yes, it is a bit perverse that we're tunneling the ATA + * command through SCSI and relying on the ATA driver + * emulating SCSI well-enough...) + * + * (See commit 160b069c25690bfb0c785994c7c3710289179107 for + * the original bug-fix and see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=556635 + * for the original bug-report.) + */ + ret = disk_scsi_inquiry_command (fd, inquiry_buf, sizeof (inquiry_buf)); + if (ret != 0) + goto out; + + /* SPC-4, section 6.4.2: Standard INQUIRY data */ + peripheral_device_type = inquiry_buf[0] & 0x1f; + if (peripheral_device_type == 0x05) + { + is_packet_device = 1; + ret = disk_identify_packet_device_command(fd, out_identify, 512); + goto check_nul_bytes; + } + if (peripheral_device_type != 0x00) { + ret = -1; + errno = EIO; + goto out; + } + + /* OK, now issue the IDENTIFY DEVICE command */ + ret = disk_identify_command(fd, out_identify, 512); + if (ret != 0) + goto out; + + check_nul_bytes: + /* Check if IDENTIFY data is all NUL bytes - if so, bail */ + all_nul_bytes = 1; + for (n = 0; n < 512; n++) { + if (out_identify[n] != '\0') { + all_nul_bytes = 0; + break; + } + } + + if (all_nul_bytes) { + ret = -1; + errno = EIO; + goto out; + } + +out: + if (out_is_packet_device != NULL) + *out_is_packet_device = is_packet_device; + return ret; +} + +static void log_fn(struct udev *udev, int priority, + const char *file, int line, const char *fn, + const char *format, va_list args) +{ + vsyslog(priority, format, args); +} + +int main(int argc, char *argv[]) +{ + struct udev *udev; + struct hd_driveid id; + uint8_t identify[512]; + uint16_t *identify_words; + char model[41]; + char model_enc[256]; + char serial[21]; + char revision[9]; + const char *node = NULL; + int export = 0; + int fd; + uint16_t word; + int rc = 0; + int is_packet_device = 0; + static const struct option options[] = { + { "export", no_argument, NULL, 'x' }, + { "help", no_argument, NULL, 'h' }, + {} + }; + + udev = udev_new(); + if (udev == NULL) + goto exit; + + udev_log_init("ata_id"); + udev_set_log_fn(udev, log_fn); + + while (1) { + int option; + + option = getopt_long(argc, argv, "xh", options, NULL); + if (option == -1) + break; + + switch (option) { + case 'x': + export = 1; + break; + case 'h': + printf("Usage: ata_id [--export] [--help] <device>\n" + " --export print values as environment keys\n" + " --help print this help text\n\n"); + goto exit; + } + } + + node = argv[optind]; + if (node == NULL) { + err(udev, "no node specified\n"); + rc = 1; + goto exit; + } + + fd = open(node, O_RDONLY|O_NONBLOCK); + if (fd < 0) { + err(udev, "unable to open '%s'\n", node); + rc = 1; + goto exit; + } + + if (disk_identify(udev, fd, identify, &is_packet_device) == 0) { + /* + * fix up only the fields from the IDENTIFY data that we are going to + * use and copy it into the hd_driveid struct for convenience + */ + disk_identify_fixup_string (identify, 10, 20); /* serial */ + disk_identify_fixup_string (identify, 23, 6); /* fwrev */ + disk_identify_fixup_string (identify, 27, 40); /* model */ + disk_identify_fixup_uint16 (identify, 0); /* configuration */ + disk_identify_fixup_uint16 (identify, 75); /* queue depth */ + disk_identify_fixup_uint16 (identify, 75); /* SATA capabilities */ + disk_identify_fixup_uint16 (identify, 82); /* command set supported */ + disk_identify_fixup_uint16 (identify, 83); /* command set supported */ + disk_identify_fixup_uint16 (identify, 84); /* command set supported */ + disk_identify_fixup_uint16 (identify, 85); /* command set supported */ + disk_identify_fixup_uint16 (identify, 86); /* command set supported */ + disk_identify_fixup_uint16 (identify, 87); /* command set supported */ + disk_identify_fixup_uint16 (identify, 89); /* time required for SECURITY ERASE UNIT */ + disk_identify_fixup_uint16 (identify, 90); /* time required for enhanced SECURITY ERASE UNIT */ + disk_identify_fixup_uint16 (identify, 91); /* current APM values */ + disk_identify_fixup_uint16 (identify, 94); /* current AAM value */ + disk_identify_fixup_uint16 (identify, 128); /* device lock function */ + disk_identify_fixup_uint16 (identify, 217); /* nominal media rotation rate */ + memcpy(&id, identify, sizeof id); + } else { + /* If this fails, then try HDIO_GET_IDENTITY */ + if (ioctl(fd, HDIO_GET_IDENTITY, &id) != 0) { + info(udev, "HDIO_GET_IDENTITY failed for '%s': %m\n", node); + rc = 2; + goto close; + } + } + identify_words = (uint16_t *) identify; + + memcpy (model, id.model, 40); + model[40] = '\0'; + udev_util_encode_string(model, model_enc, sizeof(model_enc)); + util_replace_whitespace((char *) id.model, model, 40); + util_replace_chars(model, NULL); + util_replace_whitespace((char *) id.serial_no, serial, 20); + util_replace_chars(serial, NULL); + util_replace_whitespace((char *) id.fw_rev, revision, 8); + util_replace_chars(revision, NULL); + + if (export) { + /* Set this to convey the disk speaks the ATA protocol */ + printf("ID_ATA=1\n"); + + if ((id.config >> 8) & 0x80) { + /* This is an ATAPI device */ + switch ((id.config >> 8) & 0x1f) { + case 0: + printf("ID_TYPE=cd\n"); + break; + case 1: + printf("ID_TYPE=tape\n"); + break; + case 5: + printf("ID_TYPE=cd\n"); + break; + case 7: + printf("ID_TYPE=optical\n"); + break; + default: + printf("ID_TYPE=generic\n"); + break; + } + } else { + printf("ID_TYPE=disk\n"); + } + printf("ID_BUS=ata\n"); + printf("ID_MODEL=%s\n", model); + printf("ID_MODEL_ENC=%s\n", model_enc); + printf("ID_REVISION=%s\n", revision); + if (serial[0] != '\0') { + printf("ID_SERIAL=%s_%s\n", model, serial); + printf("ID_SERIAL_SHORT=%s\n", serial); + } else { + printf("ID_SERIAL=%s\n", model); + } + + if (id.command_set_1 & (1<<5)) { + printf ("ID_ATA_WRITE_CACHE=1\n"); + printf ("ID_ATA_WRITE_CACHE_ENABLED=%d\n", (id.cfs_enable_1 & (1<<5)) ? 1 : 0); + } + if (id.command_set_1 & (1<<10)) { + printf("ID_ATA_FEATURE_SET_HPA=1\n"); + printf("ID_ATA_FEATURE_SET_HPA_ENABLED=%d\n", (id.cfs_enable_1 & (1<<10)) ? 1 : 0); + + /* + * TODO: use the READ NATIVE MAX ADDRESS command to get the native max address + * so it is easy to check whether the protected area is in use. + */ + } + if (id.command_set_1 & (1<<3)) { + printf("ID_ATA_FEATURE_SET_PM=1\n"); + printf("ID_ATA_FEATURE_SET_PM_ENABLED=%d\n", (id.cfs_enable_1 & (1<<3)) ? 1 : 0); + } + if (id.command_set_1 & (1<<1)) { + printf("ID_ATA_FEATURE_SET_SECURITY=1\n"); + printf("ID_ATA_FEATURE_SET_SECURITY_ENABLED=%d\n", (id.cfs_enable_1 & (1<<1)) ? 1 : 0); + printf("ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=%d\n", id.trseuc * 2); + if ((id.cfs_enable_1 & (1<<1))) /* enabled */ { + if (id.dlf & (1<<8)) + printf("ID_ATA_FEATURE_SET_SECURITY_LEVEL=maximum\n"); + else + printf("ID_ATA_FEATURE_SET_SECURITY_LEVEL=high\n"); + } + if (id.dlf & (1<<5)) + printf("ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=%d\n", id.trsEuc * 2); + if (id.dlf & (1<<4)) + printf("ID_ATA_FEATURE_SET_SECURITY_EXPIRE=1\n"); + if (id.dlf & (1<<3)) + printf("ID_ATA_FEATURE_SET_SECURITY_FROZEN=1\n"); + if (id.dlf & (1<<2)) + printf("ID_ATA_FEATURE_SET_SECURITY_LOCKED=1\n"); + } + if (id.command_set_1 & (1<<0)) { + printf("ID_ATA_FEATURE_SET_SMART=1\n"); + printf("ID_ATA_FEATURE_SET_SMART_ENABLED=%d\n", (id.cfs_enable_1 & (1<<0)) ? 1 : 0); + } + if (id.command_set_2 & (1<<9)) { + printf("ID_ATA_FEATURE_SET_AAM=1\n"); + printf("ID_ATA_FEATURE_SET_AAM_ENABLED=%d\n", (id.cfs_enable_2 & (1<<9)) ? 1 : 0); + printf("ID_ATA_FEATURE_SET_AAM_VENDOR_RECOMMENDED_VALUE=%d\n", id.acoustic >> 8); + printf("ID_ATA_FEATURE_SET_AAM_CURRENT_VALUE=%d\n", id.acoustic & 0xff); + } + if (id.command_set_2 & (1<<5)) { + printf("ID_ATA_FEATURE_SET_PUIS=1\n"); + printf("ID_ATA_FEATURE_SET_PUIS_ENABLED=%d\n", (id.cfs_enable_2 & (1<<5)) ? 1 : 0); + } + if (id.command_set_2 & (1<<3)) { + printf("ID_ATA_FEATURE_SET_APM=1\n"); + printf("ID_ATA_FEATURE_SET_APM_ENABLED=%d\n", (id.cfs_enable_2 & (1<<3)) ? 1 : 0); + if ((id.cfs_enable_2 & (1<<3))) + printf("ID_ATA_FEATURE_SET_APM_CURRENT_VALUE=%d\n", id.CurAPMvalues & 0xff); + } + if (id.command_set_2 & (1<<0)) + printf("ID_ATA_DOWNLOAD_MICROCODE=1\n"); + + /* + * Word 76 indicates the capabilities of a SATA device. A PATA device shall set + * word 76 to 0000h or FFFFh. If word 76 is set to 0000h or FFFFh, then + * the device does not claim compliance with the Serial ATA specification and words + * 76 through 79 are not valid and shall be ignored. + */ + word = *((uint16_t *) identify + 76); + if (word != 0x0000 && word != 0xffff) { + printf("ID_ATA_SATA=1\n"); + /* + * If bit 2 of word 76 is set to one, then the device supports the Gen2 + * signaling rate of 3.0 Gb/s (see SATA 2.6). + * + * If bit 1 of word 76 is set to one, then the device supports the Gen1 + * signaling rate of 1.5 Gb/s (see SATA 2.6). + */ + if (word & (1<<2)) + printf("ID_ATA_SATA_SIGNAL_RATE_GEN2=1\n"); + if (word & (1<<1)) + printf("ID_ATA_SATA_SIGNAL_RATE_GEN1=1\n"); + } + + /* Word 217 indicates the nominal media rotation rate of the device */ + word = *((uint16_t *) identify + 217); + if (word != 0x0000) { + if (word == 0x0001) { + printf ("ID_ATA_ROTATION_RATE_RPM=0\n"); /* non-rotating e.g. SSD */ + } else if (word >= 0x0401 && word <= 0xfffe) { + printf ("ID_ATA_ROTATION_RATE_RPM=%d\n", word); + } + } + + /* + * Words 108-111 contain a mandatory World Wide Name (WWN) in the NAA IEEE Registered identifier + * format. Word 108 bits (15:12) shall contain 5h, indicating that the naming authority is IEEE. + * All other values are reserved. + */ + word = *((uint16_t *) identify + 108); + if ((word & 0xf000) == 0x5000) { + uint64_t wwwn; + + wwwn = *((uint16_t *) identify + 108); + wwwn <<= 16; + wwwn |= *((uint16_t *) identify + 109); + wwwn <<= 16; + wwwn |= *((uint16_t *) identify + 110); + wwwn <<= 16; + wwwn |= *((uint16_t *) identify + 111); + printf("ID_WWN=0x%llx\n", (unsigned long long int) wwwn); + /* ATA devices have no vendor extension */ + printf("ID_WWN_WITH_EXTENSION=0x%llx\n", (unsigned long long int) wwwn); + } + + /* from Linux's include/linux/ata.h */ + if (identify_words[0] == 0x848a || identify_words[0] == 0x844a) { + printf("ID_ATA_CFA=1\n"); + } else { + if ((identify_words[83] & 0xc004) == 0x4004) { + printf("ID_ATA_CFA=1\n"); + } + } + } else { + if (serial[0] != '\0') + printf("%s_%s\n", model, serial); + else + printf("%s\n", model); + } +close: + close(fd); +exit: + udev_unref(udev); + udev_log_close(); + return rc; +} diff --git a/src/udev/src/cdrom_id/60-cdrom_id.rules b/src/udev/src/cdrom_id/60-cdrom_id.rules new file mode 100644 index 000000000..6eaf76a72 --- /dev/null +++ b/src/udev/src/cdrom_id/60-cdrom_id.rules @@ -0,0 +1,20 @@ +# do not edit this file, it will be overwritten on update + +ACTION=="remove", GOTO="cdrom_end" +SUBSYSTEM!="block", GOTO="cdrom_end" +KERNEL!="sr[0-9]*|xvd*", GOTO="cdrom_end" +ENV{DEVTYPE}!="disk", GOTO="cdrom_end" + +# unconditionally tag device as CDROM +KERNEL=="sr[0-9]*", ENV{ID_CDROM}="1" + +# media eject button pressed +ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end" + +# import device and media properties and lock tray to +# enable the receiving of media eject button events +IMPORT{program}="cdrom_id --lock-media $devnode" + +KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100" + +LABEL="cdrom_end" diff --git a/src/udev/src/cdrom_id/cdrom_id.c b/src/udev/src/cdrom_id/cdrom_id.c new file mode 100644 index 000000000..f90d52ec9 --- /dev/null +++ b/src/udev/src/cdrom_id/cdrom_id.c @@ -0,0 +1,1099 @@ +/* + * cdrom_id - optical drive and media information prober + * + * Copyright (C) 2008-2010 Kay Sievers <kay.sievers@vrfy.org> + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif + +#include <stdio.h> +#include <stddef.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <limits.h> +#include <fcntl.h> +#include <errno.h> +#include <getopt.h> +#include <time.h> +#include <scsi/sg.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/ioctl.h> +#include <linux/cdrom.h> + +#include "libudev.h" +#include "libudev-private.h" + +static bool debug; + +static void log_fn(struct udev *udev, int priority, + const char *file, int line, const char *fn, + const char *format, va_list args) +{ + if (debug) { + fprintf(stderr, "%s: ", fn); + vfprintf(stderr, format, args); + } else { + vsyslog(priority, format, args); + } +} + +/* device info */ +static unsigned int cd_cd_rom; +static unsigned int cd_cd_r; +static unsigned int cd_cd_rw; +static unsigned int cd_dvd_rom; +static unsigned int cd_dvd_r; +static unsigned int cd_dvd_rw; +static unsigned int cd_dvd_ram; +static unsigned int cd_dvd_plus_r; +static unsigned int cd_dvd_plus_rw; +static unsigned int cd_dvd_plus_r_dl; +static unsigned int cd_dvd_plus_rw_dl; +static unsigned int cd_bd; +static unsigned int cd_bd_r; +static unsigned int cd_bd_re; +static unsigned int cd_hddvd; +static unsigned int cd_hddvd_r; +static unsigned int cd_hddvd_rw; +static unsigned int cd_mo; +static unsigned int cd_mrw; +static unsigned int cd_mrw_w; + +/* media info */ +static unsigned int cd_media; +static unsigned int cd_media_cd_rom; +static unsigned int cd_media_cd_r; +static unsigned int cd_media_cd_rw; +static unsigned int cd_media_dvd_rom; +static unsigned int cd_media_dvd_r; +static unsigned int cd_media_dvd_rw; +static unsigned int cd_media_dvd_rw_ro; /* restricted overwrite mode */ +static unsigned int cd_media_dvd_rw_seq; /* sequential mode */ +static unsigned int cd_media_dvd_ram; +static unsigned int cd_media_dvd_plus_r; +static unsigned int cd_media_dvd_plus_rw; +static unsigned int cd_media_dvd_plus_r_dl; +static unsigned int cd_media_dvd_plus_rw_dl; +static unsigned int cd_media_bd; +static unsigned int cd_media_bd_r; +static unsigned int cd_media_bd_re; +static unsigned int cd_media_hddvd; +static unsigned int cd_media_hddvd_r; +static unsigned int cd_media_hddvd_rw; +static unsigned int cd_media_mo; +static unsigned int cd_media_mrw; +static unsigned int cd_media_mrw_w; + +static const char *cd_media_state = NULL; +static unsigned int cd_media_session_next; +static unsigned int cd_media_session_count; +static unsigned int cd_media_track_count; +static unsigned int cd_media_track_count_data; +static unsigned int cd_media_track_count_audio; +static unsigned long long int cd_media_session_last_offset; + +#define ERRCODE(s) ((((s)[2] & 0x0F) << 16) | ((s)[12] << 8) | ((s)[13])) +#define SK(errcode) (((errcode) >> 16) & 0xF) +#define ASC(errcode) (((errcode) >> 8) & 0xFF) +#define ASCQ(errcode) ((errcode) & 0xFF) + +static bool is_mounted(const char *device) +{ + struct stat statbuf; + FILE *fp; + int maj, min; + bool mounted = false; + + if (stat(device, &statbuf) < 0) + return -ENODEV; + + fp = fopen("/proc/self/mountinfo", "r"); + if (fp == NULL) + return -ENOSYS; + while (fscanf(fp, "%*s %*s %i:%i %*[^\n]", &maj, &min) == 2) { + if (makedev(maj, min) == statbuf.st_rdev) { + mounted = true; + break; + } + } + fclose(fp); + return mounted; +} + +static void info_scsi_cmd_err(struct udev *udev, char *cmd, int err) +{ + if (err == -1) { + info(udev, "%s failed\n", cmd); + return; + } + info(udev, "%s failed with SK=%Xh/ASC=%02Xh/ACQ=%02Xh\n", cmd, SK(err), ASC(err), ASCQ(err)); +} + +struct scsi_cmd { + struct cdrom_generic_command cgc; + union { + struct request_sense s; + unsigned char u[18]; + } _sense; + struct sg_io_hdr sg_io; +}; + +static void scsi_cmd_init(struct udev *udev, struct scsi_cmd *cmd) +{ + memset(cmd, 0x00, sizeof(struct scsi_cmd)); + cmd->cgc.quiet = 1; + cmd->cgc.sense = &cmd->_sense.s; + cmd->sg_io.interface_id = 'S'; + cmd->sg_io.mx_sb_len = sizeof(cmd->_sense); + cmd->sg_io.cmdp = cmd->cgc.cmd; + cmd->sg_io.sbp = cmd->_sense.u; + cmd->sg_io.flags = SG_FLAG_LUN_INHIBIT | SG_FLAG_DIRECT_IO; +} + +static void scsi_cmd_set(struct udev *udev, struct scsi_cmd *cmd, size_t i, unsigned char arg) +{ + cmd->sg_io.cmd_len = i + 1; + cmd->cgc.cmd[i] = arg; +} + +#define CHECK_CONDITION 0x01 + +static int scsi_cmd_run(struct udev *udev, struct scsi_cmd *cmd, int fd, unsigned char *buf, size_t bufsize) +{ + int ret = 0; + + if (bufsize > 0) { + cmd->sg_io.dxferp = buf; + cmd->sg_io.dxfer_len = bufsize; + cmd->sg_io.dxfer_direction = SG_DXFER_FROM_DEV; + } else { + cmd->sg_io.dxfer_direction = SG_DXFER_NONE; + } + if (ioctl(fd, SG_IO, &cmd->sg_io)) + return -1; + + if ((cmd->sg_io.info & SG_INFO_OK_MASK) != SG_INFO_OK) { + errno = EIO; + ret = -1; + if (cmd->sg_io.masked_status & CHECK_CONDITION) { + ret = ERRCODE(cmd->_sense.u); + if (ret == 0) + ret = -1; + } + } + return ret; +} + +static int media_lock(struct udev *udev, int fd, bool lock) +{ + int err; + + /* disable the kernel's lock logic */ + err = ioctl(fd, CDROM_CLEAR_OPTIONS, CDO_LOCK); + if (err < 0) + info(udev, "CDROM_CLEAR_OPTIONS, CDO_LOCK failed\n"); + + err = ioctl(fd, CDROM_LOCKDOOR, lock ? 1 : 0); + if (err < 0) + info(udev, "CDROM_LOCKDOOR failed\n"); + + return err; +} + +static int media_eject(struct udev *udev, int fd) +{ + struct scsi_cmd sc; + int err; + + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x1b); + scsi_cmd_set(udev, &sc, 4, 0x02); + scsi_cmd_set(udev, &sc, 5, 0); + err = scsi_cmd_run(udev, &sc, fd, NULL, 0); + if ((err != 0)) { + info_scsi_cmd_err(udev, "START_STOP_UNIT", err); + return -1; + } + return 0; +} + +static int cd_capability_compat(struct udev *udev, int fd) +{ + int capability; + + capability = ioctl(fd, CDROM_GET_CAPABILITY, NULL); + if (capability < 0) { + info(udev, "CDROM_GET_CAPABILITY failed\n"); + return -1; + } + + if (capability & CDC_CD_R) + cd_cd_r = 1; + if (capability & CDC_CD_RW) + cd_cd_rw = 1; + if (capability & CDC_DVD) + cd_dvd_rom = 1; + if (capability & CDC_DVD_R) + cd_dvd_r = 1; + if (capability & CDC_DVD_RAM) + cd_dvd_ram = 1; + if (capability & CDC_MRW) + cd_mrw = 1; + if (capability & CDC_MRW_W) + cd_mrw_w = 1; + return 0; +} + +static int cd_media_compat(struct udev *udev, int fd) +{ + if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) != CDS_DISC_OK) { + info(udev, "CDROM_DRIVE_STATUS != CDS_DISC_OK\n"); + return -1; + } + cd_media = 1; + return 0; +} + +static int cd_inquiry(struct udev *udev, int fd) +{ + struct scsi_cmd sc; + unsigned char inq[128]; + int err; + + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x12); + scsi_cmd_set(udev, &sc, 4, 36); + scsi_cmd_set(udev, &sc, 5, 0); + err = scsi_cmd_run(udev, &sc, fd, inq, 36); + if ((err != 0)) { + info_scsi_cmd_err(udev, "INQUIRY", err); + return -1; + } + + if ((inq[0] & 0x1F) != 5) { + info(udev, "not an MMC unit\n"); + return -1; + } + + info(udev, "INQUIRY: [%.8s][%.16s][%.4s]\n", inq + 8, inq + 16, inq + 32); + return 0; +} + +static void feature_profile_media(struct udev *udev, int cur_profile) +{ + switch (cur_profile) { + case 0x03: + case 0x04: + case 0x05: + info(udev, "profile 0x%02x \n", cur_profile); + cd_media = 1; + cd_media_mo = 1; + break; + case 0x08: + info(udev, "profile 0x%02x media_cd_rom\n", cur_profile); + cd_media = 1; + cd_media_cd_rom = 1; + break; + case 0x09: + info(udev, "profile 0x%02x media_cd_r\n", cur_profile); + cd_media = 1; + cd_media_cd_r = 1; + break; + case 0x0a: + info(udev, "profile 0x%02x media_cd_rw\n", cur_profile); + cd_media = 1; + cd_media_cd_rw = 1; + break; + case 0x10: + info(udev, "profile 0x%02x media_dvd_ro\n", cur_profile); + cd_media = 1; + cd_media_dvd_rom = 1; + break; + case 0x11: + info(udev, "profile 0x%02x media_dvd_r\n", cur_profile); + cd_media = 1; + cd_media_dvd_r = 1; + break; + case 0x12: + info(udev, "profile 0x%02x media_dvd_ram\n", cur_profile); + cd_media = 1; + cd_media_dvd_ram = 1; + break; + case 0x13: + info(udev, "profile 0x%02x media_dvd_rw_ro\n", cur_profile); + cd_media = 1; + cd_media_dvd_rw = 1; + cd_media_dvd_rw_ro = 1; + break; + case 0x14: + info(udev, "profile 0x%02x media_dvd_rw_seq\n", cur_profile); + cd_media = 1; + cd_media_dvd_rw = 1; + cd_media_dvd_rw_seq = 1; + break; + case 0x1B: + info(udev, "profile 0x%02x media_dvd_plus_r\n", cur_profile); + cd_media = 1; + cd_media_dvd_plus_r = 1; + break; + case 0x1A: + info(udev, "profile 0x%02x media_dvd_plus_rw\n", cur_profile); + cd_media = 1; + cd_media_dvd_plus_rw = 1; + break; + case 0x2A: + info(udev, "profile 0x%02x media_dvd_plus_rw_dl\n", cur_profile); + cd_media = 1; + cd_media_dvd_plus_rw_dl = 1; + break; + case 0x2B: + info(udev, "profile 0x%02x media_dvd_plus_r_dl\n", cur_profile); + cd_media = 1; + cd_media_dvd_plus_r_dl = 1; + break; + case 0x40: + info(udev, "profile 0x%02x media_bd\n", cur_profile); + cd_media = 1; + cd_media_bd = 1; + break; + case 0x41: + case 0x42: + info(udev, "profile 0x%02x media_bd_r\n", cur_profile); + cd_media = 1; + cd_media_bd_r = 1; + break; + case 0x43: + info(udev, "profile 0x%02x media_bd_re\n", cur_profile); + cd_media = 1; + cd_media_bd_re = 1; + break; + case 0x50: + info(udev, "profile 0x%02x media_hddvd\n", cur_profile); + cd_media = 1; + cd_media_hddvd = 1; + break; + case 0x51: + info(udev, "profile 0x%02x media_hddvd_r\n", cur_profile); + cd_media = 1; + cd_media_hddvd_r = 1; + break; + case 0x52: + info(udev, "profile 0x%02x media_hddvd_rw\n", cur_profile); + cd_media = 1; + cd_media_hddvd_rw = 1; + break; + default: + info(udev, "profile 0x%02x <ignored>\n", cur_profile); + break; + } +} + +static int feature_profiles(struct udev *udev, const unsigned char *profiles, size_t size) +{ + unsigned int i; + + for (i = 0; i+4 <= size; i += 4) { + int profile; + + profile = profiles[i] << 8 | profiles[i+1]; + switch (profile) { + case 0x03: + case 0x04: + case 0x05: + info(udev, "profile 0x%02x mo\n", profile); + cd_mo = 1; + break; + case 0x08: + info(udev, "profile 0x%02x cd_rom\n", profile); + cd_cd_rom = 1; + break; + case 0x09: + info(udev, "profile 0x%02x cd_r\n", profile); + cd_cd_r = 1; + break; + case 0x0A: + info(udev, "profile 0x%02x cd_rw\n", profile); + cd_cd_rw = 1; + break; + case 0x10: + info(udev, "profile 0x%02x dvd_rom\n", profile); + cd_dvd_rom = 1; + break; + case 0x12: + info(udev, "profile 0x%02x dvd_ram\n", profile); + cd_dvd_ram = 1; + break; + case 0x13: + case 0x14: + info(udev, "profile 0x%02x dvd_rw\n", profile); + cd_dvd_rw = 1; + break; + case 0x1B: + info(udev, "profile 0x%02x dvd_plus_r\n", profile); + cd_dvd_plus_r = 1; + break; + case 0x1A: + info(udev, "profile 0x%02x dvd_plus_rw\n", profile); + cd_dvd_plus_rw = 1; + break; + case 0x2A: + info(udev, "profile 0x%02x dvd_plus_rw_dl\n", profile); + cd_dvd_plus_rw_dl = 1; + break; + case 0x2B: + info(udev, "profile 0x%02x dvd_plus_r_dl\n", profile); + cd_dvd_plus_r_dl = 1; + break; + case 0x40: + cd_bd = 1; + info(udev, "profile 0x%02x bd\n", profile); + break; + case 0x41: + case 0x42: + cd_bd_r = 1; + info(udev, "profile 0x%02x bd_r\n", profile); + break; + case 0x43: + cd_bd_re = 1; + info(udev, "profile 0x%02x bd_re\n", profile); + break; + case 0x50: + cd_hddvd = 1; + info(udev, "profile 0x%02x hddvd\n", profile); + break; + case 0x51: + cd_hddvd_r = 1; + info(udev, "profile 0x%02x hddvd_r\n", profile); + break; + case 0x52: + cd_hddvd_rw = 1; + info(udev, "profile 0x%02x hddvd_rw\n", profile); + break; + default: + info(udev, "profile 0x%02x <ignored>\n", profile); + break; + } + } + return 0; +} + +/* returns 0 if media was detected */ +static int cd_profiles_old_mmc(struct udev *udev, int fd) +{ + struct scsi_cmd sc; + int err; + + unsigned char header[32]; + + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x51); + scsi_cmd_set(udev, &sc, 8, sizeof(header)); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header)); + if ((err != 0)) { + info_scsi_cmd_err(udev, "READ DISC INFORMATION", err); + if (cd_media == 1) { + info(udev, "no current profile, but disc is present; assuming CD-ROM\n"); + cd_media_cd_rom = 1; + return 0; + } else { + info(udev, "no current profile, assuming no media\n"); + return -1; + } + }; + + cd_media = 1; + + if (header[2] & 16) { + cd_media_cd_rw = 1; + info(udev, "profile 0x0a media_cd_rw\n"); + } else if ((header[2] & 3) < 2 && cd_cd_r) { + cd_media_cd_r = 1; + info(udev, "profile 0x09 media_cd_r\n"); + } else { + cd_media_cd_rom = 1; + info(udev, "profile 0x08 media_cd_rom\n"); + } + return 0; +} + +/* returns 0 if media was detected */ +static int cd_profiles(struct udev *udev, int fd) +{ + struct scsi_cmd sc; + unsigned char features[65530]; + unsigned int cur_profile = 0; + unsigned int len; + unsigned int i; + int err; + int ret; + + ret = -1; + + /* First query the current profile */ + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x46); + scsi_cmd_set(udev, &sc, 8, 8); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, features, 8); + if ((err != 0)) { + info_scsi_cmd_err(udev, "GET CONFIGURATION", err); + /* handle pre-MMC2 drives which do not support GET CONFIGURATION */ + if (SK(err) == 0x5 && ASC(err) == 0x20) { + info(udev, "drive is pre-MMC2 and does not support 46h get configuration command\n"); + info(udev, "trying to work around the problem\n"); + ret = cd_profiles_old_mmc(udev, fd); + } + goto out; + } + + cur_profile = features[6] << 8 | features[7]; + if (cur_profile > 0) { + info(udev, "current profile 0x%02x\n", cur_profile); + feature_profile_media (udev, cur_profile); + ret = 0; /* we have media */ + } else { + info(udev, "no current profile, assuming no media\n"); + } + + len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3]; + info(udev, "GET CONFIGURATION: size of features buffer 0x%04x\n", len); + + if (len > sizeof(features)) { + info(udev, "can not get features in a single query, truncating\n"); + len = sizeof(features); + } else if (len <= 8) { + len = sizeof(features); + } + + /* Now get the full feature buffer */ + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x46); + scsi_cmd_set(udev, &sc, 7, ( len >> 8 ) & 0xff); + scsi_cmd_set(udev, &sc, 8, len & 0xff); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, features, len); + if ((err != 0)) { + info_scsi_cmd_err(udev, "GET CONFIGURATION", err); + return -1; + } + + /* parse the length once more, in case the drive decided to have other features suddenly :) */ + len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3]; + info(udev, "GET CONFIGURATION: size of features buffer 0x%04x\n", len); + + if (len > sizeof(features)) { + info(udev, "can not get features in a single query, truncating\n"); + len = sizeof(features); + } + + /* device features */ + for (i = 8; i+4 < len; i += (4 + features[i+3])) { + unsigned int feature; + + feature = features[i] << 8 | features[i+1]; + + switch (feature) { + case 0x00: + info(udev, "GET CONFIGURATION: feature 'profiles', with %i entries\n", features[i+3] / 4); + feature_profiles(udev, &features[i]+4, features[i+3]); + break; + default: + info(udev, "GET CONFIGURATION: feature 0x%04x <ignored>, with 0x%02x bytes\n", feature, features[i+3]); + break; + } + } +out: + return ret; +} + +static int cd_media_info(struct udev *udev, int fd) +{ + struct scsi_cmd sc; + unsigned char header[32]; + static const char *media_status[] = { + "blank", + "appendable", + "complete", + "other" + }; + int err; + + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x51); + scsi_cmd_set(udev, &sc, 8, sizeof(header) & 0xff); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header)); + if ((err != 0)) { + info_scsi_cmd_err(udev, "READ DISC INFORMATION", err); + return -1; + }; + + cd_media = 1; + info(udev, "disk type %02x\n", header[8]); + info(udev, "hardware reported media status: %s\n", media_status[header[2] & 3]); + + /* exclude plain CDROM, some fake cdroms return 0 for "blank" media here */ + if (!cd_media_cd_rom) + cd_media_state = media_status[header[2] & 3]; + + /* fresh DVD-RW in restricted overwite mode reports itself as + * "appendable"; change it to "blank" to make it consistent with what + * gets reported after blanking, and what userspace expects */ + if (cd_media_dvd_rw_ro && (header[2] & 3) == 1) + cd_media_state = media_status[0]; + + /* DVD+RW discs (and DVD-RW in restricted mode) once formatted are + * always "complete", DVD-RAM are "other" or "complete" if the disc is + * write protected; we need to check the contents if it is blank */ + if ((cd_media_dvd_rw_ro || cd_media_dvd_plus_rw || cd_media_dvd_plus_rw_dl || cd_media_dvd_ram) && (header[2] & 3) > 1) { + unsigned char buffer[32 * 2048]; + unsigned char result, len; + int block, offset; + + if (cd_media_dvd_ram) { + /* a write protected dvd-ram may report "complete" status */ + + unsigned char dvdstruct[8]; + unsigned char format[12]; + + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0xAD); + scsi_cmd_set(udev, &sc, 7, 0xC0); + scsi_cmd_set(udev, &sc, 9, sizeof(dvdstruct)); + scsi_cmd_set(udev, &sc, 11, 0); + err = scsi_cmd_run(udev, &sc, fd, dvdstruct, sizeof(dvdstruct)); + if ((err != 0)) { + info_scsi_cmd_err(udev, "READ DVD STRUCTURE", err); + return -1; + } + if (dvdstruct[4] & 0x02) { + cd_media_state = media_status[2]; + info(udev, "write-protected DVD-RAM media inserted\n"); + goto determined; + } + + /* let's make sure we don't try to read unformatted media */ + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x23); + scsi_cmd_set(udev, &sc, 8, sizeof(format)); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, format, sizeof(format)); + if ((err != 0)) { + info_scsi_cmd_err(udev, "READ DVD FORMAT CAPACITIES", err); + return -1; + } + + len = format[3]; + if (len & 7 || len < 16) { + info(udev, "invalid format capacities length\n"); + return -1; + } + + switch(format[8] & 3) { + case 1: + info(udev, "unformatted DVD-RAM media inserted\n"); + /* This means that last format was interrupted + * or failed, blank dvd-ram discs are factory + * formatted. Take no action here as it takes + * quite a while to reformat a dvd-ram and it's + * not automatically started */ + goto determined; + + case 2: + info(udev, "formatted DVD-RAM media inserted\n"); + break; + + case 3: + cd_media = 0; //return no media + info(udev, "format capacities returned no media\n"); + return -1; + } + } + + /* Take a closer look at formatted media (unformatted DVD+RW + * has "blank" status", DVD-RAM was examined earlier) and check + * for ISO and UDF PVDs or a fs superblock presence and do it + * in one ioctl (we need just sectors 0 and 16) */ + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x28); + scsi_cmd_set(udev, &sc, 5, 0); + scsi_cmd_set(udev, &sc, 8, 32); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, buffer, sizeof(buffer)); + if ((err != 0)) { + cd_media = 0; + info_scsi_cmd_err(udev, "READ FIRST 32 BLOCKS", err); + return -1; + } + + /* if any non-zero data is found in sector 16 (iso and udf) or + * eventually 0 (fat32 boot sector, ext2 superblock, etc), disc + * is assumed non-blank */ + result = 0; + + for (block = 32768; block >= 0 && !result; block -= 32768) { + offset = block; + while (offset < (block + 2048) && !result) { + result = buffer [offset]; + offset++; + } + } + + if (!result) { + cd_media_state = media_status[0]; + info(udev, "no data in blocks 0 or 16, assuming blank\n"); + } else { + info(udev, "data in blocks 0 or 16, assuming complete\n"); + } + } + +determined: + /* "other" is e. g. DVD-RAM, can't append sessions there; DVDs in + * restricted overwrite mode can never append, only in sequential mode */ + if ((header[2] & 3) < 2 && !cd_media_dvd_rw_ro) + cd_media_session_next = header[10] << 8 | header[5]; + cd_media_session_count = header[9] << 8 | header[4]; + cd_media_track_count = header[11] << 8 | header[6]; + + return 0; +} + +static int cd_media_toc(struct udev *udev, int fd) +{ + struct scsi_cmd sc; + unsigned char header[12]; + unsigned char toc[65536]; + unsigned int len, i, num_tracks; + unsigned char *p; + int err; + + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x43); + scsi_cmd_set(udev, &sc, 6, 1); + scsi_cmd_set(udev, &sc, 8, sizeof(header) & 0xff); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header)); + if ((err != 0)) { + info_scsi_cmd_err(udev, "READ TOC", err); + return -1; + } + + len = (header[0] << 8 | header[1]) + 2; + info(udev, "READ TOC: len: %d, start track: %d, end track: %d\n", len, header[2], header[3]); + if (len > sizeof(toc)) + return -1; + if (len < 2) + return -1; + /* 2: first track, 3: last track */ + num_tracks = header[3] - header[2] + 1; + + /* empty media has no tracks */ + if (len < 8) + return 0; + + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x43); + scsi_cmd_set(udev, &sc, 6, header[2]); /* First Track/Session Number */ + scsi_cmd_set(udev, &sc, 7, (len >> 8) & 0xff); + scsi_cmd_set(udev, &sc, 8, len & 0xff); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, toc, len); + if ((err != 0)) { + info_scsi_cmd_err(udev, "READ TOC (tracks)", err); + return -1; + } + + /* Take care to not iterate beyond the last valid track as specified in + * the TOC, but also avoid going beyond the TOC length, just in case + * the last track number is invalidly large */ + for (p = toc+4, i = 4; i < len-8 && num_tracks > 0; i += 8, p += 8, --num_tracks) { + unsigned int block; + unsigned int is_data_track; + + is_data_track = (p[1] & 0x04) != 0; + + block = p[4] << 24 | p[5] << 16 | p[6] << 8 | p[7]; + info(udev, "track=%u info=0x%x(%s) start_block=%u\n", + p[2], p[1] & 0x0f, is_data_track ? "data":"audio", block); + + if (is_data_track) + cd_media_track_count_data++; + else + cd_media_track_count_audio++; + } + + scsi_cmd_init(udev, &sc); + scsi_cmd_set(udev, &sc, 0, 0x43); + scsi_cmd_set(udev, &sc, 2, 1); /* Session Info */ + scsi_cmd_set(udev, &sc, 8, sizeof(header)); + scsi_cmd_set(udev, &sc, 9, 0); + err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header)); + if ((err != 0)) { + info_scsi_cmd_err(udev, "READ TOC (multi session)", err); + return -1; + } + len = header[4+4] << 24 | header[4+5] << 16 | header[4+6] << 8 | header[4+7]; + info(udev, "last track %u starts at block %u\n", header[4+2], len); + cd_media_session_last_offset = (unsigned long long int)len * 2048; + return 0; +} + +int main(int argc, char *argv[]) +{ + struct udev *udev; + static const struct option options[] = { + { "lock-media", no_argument, NULL, 'l' }, + { "unlock-media", no_argument, NULL, 'u' }, + { "eject-media", no_argument, NULL, 'e' }, + { "debug", no_argument, NULL, 'd' }, + { "help", no_argument, NULL, 'h' }, + {} + }; + bool eject = false; + bool lock = false; + bool unlock = false; + const char *node = NULL; + int fd = -1; + int cnt; + int rc = 0; + + udev = udev_new(); + if (udev == NULL) + goto exit; + + udev_log_init("cdrom_id"); + udev_set_log_fn(udev, log_fn); + + while (1) { + int option; + + option = getopt_long(argc, argv, "deluh", options, NULL); + if (option == -1) + break; + + switch (option) { + case 'l': + lock = true; + break; + case 'u': + unlock = true; + break; + case 'e': + eject = true; + break; + case 'd': + debug = true; + if (udev_get_log_priority(udev) < LOG_INFO) + udev_set_log_priority(udev, LOG_INFO); + break; + case 'h': + printf("Usage: cdrom_id [options] <device>\n" + " --lock-media lock the media (to enable eject request events)\n" + " --unlock-media unlock the media\n" + " --eject-media eject the media\n" + " --debug debug to stderr\n" + " --help print this help text\n\n"); + goto exit; + default: + rc = 1; + goto exit; + } + } + + node = argv[optind]; + if (!node) { + err(udev, "no device\n"); + fprintf(stderr, "no device\n"); + rc = 1; + goto exit; + } + + srand((unsigned int)getpid()); + for (cnt = 20; cnt > 0; cnt--) { + struct timespec duration; + + fd = open(node, O_RDONLY|O_NONBLOCK|(is_mounted(node) ? 0 : O_EXCL)); + if (fd >= 0 || errno != EBUSY) + break; + duration.tv_sec = 0; + duration.tv_nsec = (100 * 1000 * 1000) + (rand() % 100 * 1000 * 1000); + nanosleep(&duration, NULL); + } + if (fd < 0) { + info(udev, "unable to open '%s'\n", node); + fprintf(stderr, "unable to open '%s'\n", node); + rc = 1; + goto exit; + } + info(udev, "probing: '%s'\n", node); + + /* same data as original cdrom_id */ + if (cd_capability_compat(udev, fd) < 0) { + rc = 1; + goto exit; + } + + /* check for media - don't bail if there's no media as we still need to + * to read profiles */ + cd_media_compat(udev, fd); + + /* check if drive talks MMC */ + if (cd_inquiry(udev, fd) < 0) + goto work; + + /* read drive and possibly current profile */ + if (cd_profiles(udev, fd) != 0) + goto work; + + /* at this point we are guaranteed to have media in the drive - find out more about it */ + + /* get session/track info */ + cd_media_toc(udev, fd); + + /* get writable media state */ + cd_media_info(udev, fd); + +work: + /* lock the media, so we enable eject button events */ + if (lock && cd_media) { + info(udev, "PREVENT_ALLOW_MEDIUM_REMOVAL (lock)\n"); + media_lock(udev, fd, true); + } + + if (unlock && cd_media) { + info(udev, "PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n"); + media_lock(udev, fd, false); + } + + if (eject) { + info(udev, "PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n"); + media_lock(udev, fd, false); + info(udev, "START_STOP_UNIT (eject)\n"); + media_eject(udev, fd); + } + + printf("ID_CDROM=1\n"); + if (cd_cd_rom) + printf("ID_CDROM_CD=1\n"); + if (cd_cd_r) + printf("ID_CDROM_CD_R=1\n"); + if (cd_cd_rw) + printf("ID_CDROM_CD_RW=1\n"); + if (cd_dvd_rom) + printf("ID_CDROM_DVD=1\n"); + if (cd_dvd_r) + printf("ID_CDROM_DVD_R=1\n"); + if (cd_dvd_rw) + printf("ID_CDROM_DVD_RW=1\n"); + if (cd_dvd_ram) + printf("ID_CDROM_DVD_RAM=1\n"); + if (cd_dvd_plus_r) + printf("ID_CDROM_DVD_PLUS_R=1\n"); + if (cd_dvd_plus_rw) + printf("ID_CDROM_DVD_PLUS_RW=1\n"); + if (cd_dvd_plus_r_dl) + printf("ID_CDROM_DVD_PLUS_R_DL=1\n"); + if (cd_dvd_plus_rw_dl) + printf("ID_CDROM_DVD_PLUS_RW_DL=1\n"); + if (cd_bd) + printf("ID_CDROM_BD=1\n"); + if (cd_bd_r) + printf("ID_CDROM_BD_R=1\n"); + if (cd_bd_re) + printf("ID_CDROM_BD_RE=1\n"); + if (cd_hddvd) + printf("ID_CDROM_HDDVD=1\n"); + if (cd_hddvd_r) + printf("ID_CDROM_HDDVD_R=1\n"); + if (cd_hddvd_rw) + printf("ID_CDROM_HDDVD_RW=1\n"); + if (cd_mo) + printf("ID_CDROM_MO=1\n"); + if (cd_mrw) + printf("ID_CDROM_MRW=1\n"); + if (cd_mrw_w) + printf("ID_CDROM_MRW_W=1\n"); + + if (cd_media) + printf("ID_CDROM_MEDIA=1\n"); + if (cd_media_mo) + printf("ID_CDROM_MEDIA_MO=1\n"); + if (cd_media_mrw) + printf("ID_CDROM_MEDIA_MRW=1\n"); + if (cd_media_mrw_w) + printf("ID_CDROM_MEDIA_MRW_W=1\n"); + if (cd_media_cd_rom) + printf("ID_CDROM_MEDIA_CD=1\n"); + if (cd_media_cd_r) + printf("ID_CDROM_MEDIA_CD_R=1\n"); + if (cd_media_cd_rw) + printf("ID_CDROM_MEDIA_CD_RW=1\n"); + if (cd_media_dvd_rom) + printf("ID_CDROM_MEDIA_DVD=1\n"); + if (cd_media_dvd_r) + printf("ID_CDROM_MEDIA_DVD_R=1\n"); + if (cd_media_dvd_ram) + printf("ID_CDROM_MEDIA_DVD_RAM=1\n"); + if (cd_media_dvd_rw) + printf("ID_CDROM_MEDIA_DVD_RW=1\n"); + if (cd_media_dvd_plus_r) + printf("ID_CDROM_MEDIA_DVD_PLUS_R=1\n"); + if (cd_media_dvd_plus_rw) + printf("ID_CDROM_MEDIA_DVD_PLUS_RW=1\n"); + if (cd_media_dvd_plus_rw_dl) + printf("ID_CDROM_MEDIA_DVD_PLUS_RW_DL=1\n"); + if (cd_media_dvd_plus_r_dl) + printf("ID_CDROM_MEDIA_DVD_PLUS_R_DL=1\n"); + if (cd_media_bd) + printf("ID_CDROM_MEDIA_BD=1\n"); + if (cd_media_bd_r) + printf("ID_CDROM_MEDIA_BD_R=1\n"); + if (cd_media_bd_re) + printf("ID_CDROM_MEDIA_BD_RE=1\n"); + if (cd_media_hddvd) + printf("ID_CDROM_MEDIA_HDDVD=1\n"); + if (cd_media_hddvd_r) + printf("ID_CDROM_MEDIA_HDDVD_R=1\n"); + if (cd_media_hddvd_rw) + printf("ID_CDROM_MEDIA_HDDVD_RW=1\n"); + + if (cd_media_state != NULL) + printf("ID_CDROM_MEDIA_STATE=%s\n", cd_media_state); + if (cd_media_session_next > 0) + printf("ID_CDROM_MEDIA_SESSION_NEXT=%d\n", cd_media_session_next); + if (cd_media_session_count > 0) + printf("ID_CDROM_MEDIA_SESSION_COUNT=%d\n", cd_media_session_count); + if (cd_media_session_count > 1 && cd_media_session_last_offset > 0) + printf("ID_CDROM_MEDIA_SESSION_LAST_OFFSET=%llu\n", cd_media_session_last_offset); + if (cd_media_track_count > 0) + printf("ID_CDROM_MEDIA_TRACK_COUNT=%d\n", cd_media_track_count); + if (cd_media_track_count_audio > 0) + printf("ID_CDROM_MEDIA_TRACK_COUNT_AUDIO=%d\n", cd_media_track_count_audio); + if (cd_media_track_count_data > 0) + printf("ID_CDROM_MEDIA_TRACK_COUNT_DATA=%d\n", cd_media_track_count_data); +exit: + if (fd >= 0) + close(fd); + udev_unref(udev); + udev_log_close(); + return rc; +} diff --git a/src/udev/src/collect/collect.c b/src/udev/src/collect/collect.c new file mode 100644 index 000000000..076fe479e --- /dev/null +++ b/src/udev/src/collect/collect.c @@ -0,0 +1,473 @@ +/* + * Collect variables across events. + * + * usage: collect [--add|--remove] <checkpoint> <id> <idlist> + * + * Adds ID <id> to the list governed by <checkpoint>. + * <id> must be part of the ID list <idlist>. + * If all IDs given by <idlist> are listed (ie collect has been + * invoked for each ID in <idlist>) collect returns 0, the + * number of missing IDs otherwise. + * A negative number is returned on error. + * + * Copyright(C) 2007, Hannes Reinecke <hare@suse.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. + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <unistd.h> +#include <signal.h> +#include <fcntl.h> +#include <errno.h> +#include <string.h> +#include <getopt.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "libudev.h" +#include "libudev-private.h" + +#define BUFSIZE 16 +#define UDEV_ALARM_TIMEOUT 180 + +enum collect_state { + STATE_NONE, + STATE_OLD, + STATE_CONFIRMED, +}; + +struct _mate { + struct udev_list_node node; + char *name; + enum collect_state state; +}; + +static struct udev_list_node bunch; +static int debug; + +/* This can increase dynamically */ +static size_t bufsize = BUFSIZE; + +static struct _mate *node_to_mate(struct udev_list_node *node) +{ + char *mate; + + mate = (char *)node; + mate -= offsetof(struct _mate, node); + return (struct _mate *)mate; +} + +static void sig_alrm(int signo) +{ + exit(4); +} + +static void usage(void) +{ + printf("usage: collect [--add|--remove] [--debug] <checkpoint> <id> <idlist>\n" + "\n" + " Adds ID <id> to the list governed by <checkpoint>.\n" + " <id> must be part of the list <idlist>.\n" + " If all IDs given by <idlist> are listed (ie collect has been\n" + " invoked for each ID in <idlist>) collect returns 0, the\n" + " number of missing IDs otherwise.\n" + " On error a negative number is returned.\n" + "\n"); +} + +/* + * prepare + * + * Prepares the database file + */ +static int prepare(char *dir, char *filename) +{ + struct stat statbuf; + char buf[512]; + int fd; + + if (stat(dir, &statbuf) < 0) + mkdir(dir, 0700); + + sprintf(buf, "%s/%s", dir, filename); + + fd = open(buf,O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); + if (fd < 0) + fprintf(stderr, "Cannot open %s: %s\n", buf, strerror(errno)); + + if (lockf(fd,F_TLOCK,0) < 0) { + if (debug) + fprintf(stderr, "Lock taken, wait for %d seconds\n", UDEV_ALARM_TIMEOUT); + if (errno == EAGAIN || errno == EACCES) { + alarm(UDEV_ALARM_TIMEOUT); + lockf(fd, F_LOCK, 0); + if (debug) + fprintf(stderr, "Acquired lock on %s\n", buf); + } else { + if (debug) + fprintf(stderr, "Could not get lock on %s: %s\n", buf, strerror(errno)); + } + } + + return fd; +} + +/* + * Read checkpoint file + * + * Tricky reading this. We allocate a buffer twice as large + * as we're going to read. Then we read into the upper half + * of that buffer and start parsing. + * Once we do _not_ find end-of-work terminator (whitespace + * character) we move the upper half to the lower half, + * adjust the read pointer and read the next bit. + * Quite clever methinks :-) + * I should become a programmer ... + * + * Yes, one could have used fgets() for this. But then we'd + * have to use freopen etc which I found quite tedious. + */ +static int checkout(int fd) +{ + int len; + char *buf, *ptr, *word = NULL; + struct _mate *him; + + restart: + len = bufsize >> 1; + buf = calloc(1,bufsize + 1); + if (!buf) { + fprintf(stderr, "Out of memory\n"); + return -1; + } + memset(buf, ' ', bufsize); + ptr = buf + len; + while ((read(fd, buf + len, len)) > 0) { + while (ptr && *ptr) { + word = ptr; + ptr = strpbrk(word," \n\t\r"); + if (!ptr && word < (buf + len)) { + bufsize = bufsize << 1; + if (debug) + fprintf(stderr, "ID overflow, restarting with size %zi\n", bufsize); + free(buf); + lseek(fd, 0, SEEK_SET); + goto restart; + } + if (ptr) { + *ptr = '\0'; + ptr++; + if (!strlen(word)) + continue; + + if (debug) + fprintf(stderr, "Found word %s\n", word); + him = malloc(sizeof (struct _mate)); + him->name = strdup(word); + him->state = STATE_OLD; + udev_list_node_append(&him->node, &bunch); + word = NULL; + } + } + memcpy(buf, buf + len, len); + memset(buf + len, ' ', len); + + if (!ptr) + ptr = word; + if (!ptr) + break; + ptr -= len; + } + + free(buf); + return 0; +} + +/* + * invite + * + * Adds a new ID 'us' to the internal list, + * marks it as confirmed. + */ +static void invite(char *us) +{ + struct udev_list_node *him_node; + struct _mate *who = NULL; + + if (debug) + fprintf(stderr, "Adding ID '%s'\n", us); + + udev_list_node_foreach(him_node, &bunch) { + struct _mate *him = node_to_mate(him_node); + + if (!strcmp(him->name, us)) { + him->state = STATE_CONFIRMED; + who = him; + } + } + if (debug && !who) + fprintf(stderr, "ID '%s' not in database\n", us); + +} + +/* + * reject + * + * Marks the ID 'us' as invalid, + * causing it to be removed when the + * list is written out. + */ +static void reject(char *us) +{ + struct udev_list_node *him_node; + struct _mate *who = NULL; + + if (debug) + fprintf(stderr, "Removing ID '%s'\n", us); + + udev_list_node_foreach(him_node, &bunch) { + struct _mate *him = node_to_mate(him_node); + + if (!strcmp(him->name, us)) { + him->state = STATE_NONE; + who = him; + } + } + if (debug && !who) + fprintf(stderr, "ID '%s' not in database\n", us); +} + +/* + * kickout + * + * Remove all IDs in the internal list which are not part + * of the list passed via the commandline. + */ +static void kickout(void) +{ + struct udev_list_node *him_node; + struct udev_list_node *tmp; + + udev_list_node_foreach_safe(him_node, tmp, &bunch) { + struct _mate *him = node_to_mate(him_node); + + if (him->state == STATE_OLD) { + udev_list_node_remove(&him->node); + free(him->name); + free(him); + } + } +} + +/* + * missing + * + * Counts all missing IDs in the internal list. + */ +static int missing(int fd) +{ + char *buf; + int ret = 0; + struct udev_list_node *him_node; + + buf = malloc(bufsize); + if (!buf) + return -1; + + udev_list_node_foreach(him_node, &bunch) { + struct _mate *him = node_to_mate(him_node); + + if (him->state == STATE_NONE) { + ret++; + } else { + while (strlen(him->name)+1 >= bufsize) { + char *tmpbuf; + + bufsize = bufsize << 1; + tmpbuf = realloc(buf, bufsize); + if (!tmpbuf) { + free(buf); + return -1; + } + buf = tmpbuf; + } + snprintf(buf, strlen(him->name)+2, "%s ", him->name); + write(fd, buf, strlen(buf)); + } + } + + free(buf); + return ret; +} + +/* + * everybody + * + * Prints out the status of the internal list. + */ +static void everybody(void) +{ + struct udev_list_node *him_node; + const char *state = ""; + + udev_list_node_foreach(him_node, &bunch) { + struct _mate *him = node_to_mate(him_node); + + switch (him->state) { + case STATE_NONE: + state = "none"; + break; + case STATE_OLD: + state = "old"; + break; + case STATE_CONFIRMED: + state = "confirmed"; + break; + } + fprintf(stderr, "ID: %s=%s\n", him->name, state); + } +} + +int main(int argc, char **argv) +{ + struct udev *udev; + static const struct option options[] = { + { "add", no_argument, NULL, 'a' }, + { "remove", no_argument, NULL, 'r' }, + { "debug", no_argument, NULL, 'd' }, + { "help", no_argument, NULL, 'h' }, + {} + }; + int argi; + char *checkpoint, *us; + int fd; + int i; + int ret = EXIT_SUCCESS; + int prune = 0; + char tmpdir[UTIL_PATH_SIZE]; + + udev = udev_new(); + if (udev == NULL) { + ret = EXIT_FAILURE; + goto exit; + } + + while (1) { + int option; + + option = getopt_long(argc, argv, "ardh", options, NULL); + if (option == -1) + break; + + switch (option) { + case 'a': + prune = 0; + break; + case 'r': + prune = 1; + break; + case 'd': + debug = 1; + break; + case 'h': + usage(); + goto exit; + default: + ret = 1; + goto exit; + } + } + + argi = optind; + if (argi + 2 > argc) { + printf("Missing parameter(s)\n"); + ret = 1; + goto exit; + } + checkpoint = argv[argi++]; + us = argv[argi++]; + + if (signal(SIGALRM, sig_alrm) == SIG_ERR) { + fprintf(stderr, "Cannot set SIGALRM: %s\n", strerror(errno)); + ret = 2; + goto exit; + } + + udev_list_node_init(&bunch); + + if (debug) + fprintf(stderr, "Using checkpoint '%s'\n", checkpoint); + + util_strscpyl(tmpdir, sizeof(tmpdir), udev_get_run_path(udev), "/collect", NULL); + fd = prepare(tmpdir, checkpoint); + if (fd < 0) { + ret = 3; + goto out; + } + + if (checkout(fd) < 0) { + ret = 2; + goto out; + } + + for (i = argi; i < argc; i++) { + struct udev_list_node *him_node; + struct _mate *who; + + who = NULL; + udev_list_node_foreach(him_node, &bunch) { + struct _mate *him = node_to_mate(him_node); + + if (!strcmp(him->name, argv[i])) + who = him; + } + if (!who) { + struct _mate *him; + + if (debug) + fprintf(stderr, "ID %s: not in database\n", argv[i]); + him = malloc(sizeof (struct _mate)); + him->name = malloc(strlen(argv[i]) + 1); + strcpy(him->name, argv[i]); + him->state = STATE_NONE; + udev_list_node_append(&him->node, &bunch); + } else { + if (debug) + fprintf(stderr, "ID %s: found in database\n", argv[i]); + who->state = STATE_CONFIRMED; + } + } + + if (prune) + reject(us); + else + invite(us); + + if (debug) { + everybody(); + fprintf(stderr, "Prune lists\n"); + } + kickout(); + + lseek(fd, 0, SEEK_SET); + ftruncate(fd, 0); + ret = missing(fd); + + lockf(fd, F_ULOCK, 0); + close(fd); +out: + if (debug) + everybody(); + if (ret >= 0) + printf("COLLECT_%s=%d\n", checkpoint, ret); +exit: + udev_unref(udev); + return ret; +} diff --git a/src/udev/src/docs/.gitignore b/src/udev/src/docs/.gitignore new file mode 100644 index 000000000..dca700a99 --- /dev/null +++ b/src/udev/src/docs/.gitignore @@ -0,0 +1,17 @@ +libudev-overrides.txt +html/ +tmpl/ +xml/ +*.stamp +*.bak +version.xml +libudev-decl-list.txt +libudev-decl.txt +libudev-undeclared.txt +libudev-undocumented.txt +libudev-unused.txt +libudev.args +libudev.hierarchy +libudev.interfaces +libudev.prerequisites +libudev.signals diff --git a/src/udev/src/docs/Makefile.am b/src/udev/src/docs/Makefile.am new file mode 100644 index 000000000..07d06eb14 --- /dev/null +++ b/src/udev/src/docs/Makefile.am @@ -0,0 +1,99 @@ +## Process this file with automake to produce Makefile.in + +# We require automake 1.10 at least. +AUTOMAKE_OPTIONS = 1.10 + +# This is a blank Makefile.am for using gtk-doc. +# Copy this to your project's API docs directory and modify the variables to +# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples +# of using the various options. + +# The name of the module, e.g. 'glib'. +DOC_MODULE=libudev + +# Uncomment for versioned docs and specify the version of the module, e.g. '2'. +#DOC_MODULE_VERSION=2 + +# The top-level SGML file. You can change this if you want to. +DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml + +# The directory containing the source code. Relative to $(srcdir). +# gtk-doc will search all .c & .h files beneath here for inline comments +# documenting the functions and macros. +# e.g. DOC_SOURCE_DIR=../../../gtk +DOC_SOURCE_DIR=$(top_srcdir)/src + +# Extra options to pass to gtkdoc-scangobj. Not normally needed. +SCANGOBJ_OPTIONS= + +# Extra options to supply to gtkdoc-scan. +# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" +SCAN_OPTIONS= + +# Extra options to supply to gtkdoc-mkdb. +# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml +MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space udev + +# Extra options to supply to gtkdoc-mktmpl +# e.g. MKTMPL_OPTIONS=--only-section-tmpl +MKTMPL_OPTIONS= + +# Extra options to supply to gtkdoc-mkhtml +MKHTML_OPTIONS=--path=$(abs_srcdir) --path=$(abs_builddir) + +# Extra options to supply to gtkdoc-fixref. Not normally needed. +# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html +FIXXREF_OPTIONS= + +# Used for dependencies. The docs will be rebuilt if any of these change. +# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h +# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c +HFILE_GLOB=$(top_srcdir)/src/libudev*.h +CFILE_GLOB=$(top_srcdir)/src/libudev*.c + +# Extra header to include when scanning, which are not under DOC_SOURCE_DIR +# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h +EXTRA_HFILES= + +# Header files to ignore when scanning. Use base file name, no paths +# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h +IGNORE_HFILES= libudev-private.h + +# Images to copy into HTML directory. +# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png +HTML_IMAGES= + +# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). +# e.g. content_files=running.sgml building.sgml changes-2.0.sgml +content_files = version.xml + +# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded +# These files must be listed here *and* in content_files +# e.g. expand_content_files=running.sgml +expand_content_files= + +# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. +# Only needed if you are using gtkdoc-scangobj to dynamically query widget +# signals and properties. +# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) +# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) +GTKDOC_CFLAGS= +GTKDOC_LIBS= + +# This includes the standard gtk-doc make rules, copied by gtkdocize. +include $(top_srcdir)/gtk-doc.make + +# Other files to distribute +# e.g. EXTRA_DIST += version.xml.in +EXTRA_DIST += version.xml.in + +# Files not to distribute +# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types +# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt +#DISTCLEANFILES += + +# Comment this out if you want your docs-status tested during 'make check' +if ENABLE_GTK_DOC +#TESTS_ENVIRONMENT = cd $(srcsrc) +#TESTS = $(GTKDOC_CHECK) +endif diff --git a/src/udev/src/docs/libudev-docs.xml b/src/udev/src/docs/libudev-docs.xml new file mode 100644 index 000000000..b7feb4552 --- /dev/null +++ b/src/udev/src/docs/libudev-docs.xml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" + "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" +[ + <!ENTITY version SYSTEM "version.xml"> +]> +<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude"> + <bookinfo> + <title>libudev Reference Manual</title> + <releaseinfo>for libudev version &version;</releaseinfo> + <copyright> + <year>2009-2011</year> + <holder>Kay Sievers <kay.sievers@vrfy.org></holder> + </copyright> + </bookinfo> + + <chapter> + <title>libudev</title> + <xi:include href="xml/libudev.xml"/> + <xi:include href="xml/libudev-list.xml"/> + <xi:include href="xml/libudev-device.xml"/> + <xi:include href="xml/libudev-monitor.xml"/> + <xi:include href="xml/libudev-enumerate.xml"/> + <xi:include href="xml/libudev-queue.xml"/> + <xi:include href="xml/libudev-util.xml"/> + </chapter> + + <index id="api-index-full"> + <title>API Index</title> + <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include> + </index> +</book> diff --git a/src/udev/src/docs/libudev-sections.txt b/src/udev/src/docs/libudev-sections.txt new file mode 100644 index 000000000..15c3e934b --- /dev/null +++ b/src/udev/src/docs/libudev-sections.txt @@ -0,0 +1,127 @@ +<SECTION> +<FILE>libudev</FILE> +<TITLE>udev</TITLE> +udev +udev_ref +udev_unref +udev_new +udev_set_log_fn +udev_get_log_priority +udev_set_log_priority +udev_get_sys_path +udev_get_dev_path +udev_get_run_path +udev_get_userdata +udev_set_userdata +</SECTION> + +<SECTION> +<FILE>libudev-list</FILE> +<TITLE>udev_list</TITLE> +udev_list_entry +udev_list_entry_get_next +udev_list_entry_get_by_name +udev_list_entry_get_name +udev_list_entry_get_value +udev_list_entry_foreach +</SECTION> + +<SECTION> +<FILE>libudev-device</FILE> +<TITLE>udev_device</TITLE> +udev_device +udev_device_ref +udev_device_unref +udev_device_get_udev +udev_device_new_from_syspath +udev_device_new_from_devnum +udev_device_new_from_subsystem_sysname +udev_device_new_from_environment +udev_device_get_parent +udev_device_get_parent_with_subsystem_devtype +udev_device_get_devpath +udev_device_get_subsystem +udev_device_get_devtype +udev_device_get_syspath +udev_device_get_sysname +udev_device_get_sysnum +udev_device_get_devnode +udev_device_get_is_initialized +udev_device_get_devlinks_list_entry +udev_device_get_properties_list_entry +udev_device_get_tags_list_entry +udev_device_get_property_value +udev_device_get_driver +udev_device_get_devnum +udev_device_get_action +udev_device_get_sysattr_value +udev_device_get_sysattr_list_entry +udev_device_get_seqnum +udev_device_get_usec_since_initialized +udev_device_has_tag +</SECTION> + +<SECTION> +<FILE>libudev-monitor</FILE> +<TITLE>udev_monitor</TITLE> +udev_monitor +udev_monitor_ref +udev_monitor_unref +udev_monitor_get_udev +udev_monitor_new_from_netlink +udev_monitor_new_from_socket +udev_monitor_enable_receiving +udev_monitor_set_receive_buffer_size +udev_monitor_get_fd +udev_monitor_receive_device +udev_monitor_filter_add_match_subsystem_devtype +udev_monitor_filter_add_match_tag +udev_monitor_filter_update +udev_monitor_filter_remove +</SECTION> + +<SECTION> +<FILE>libudev-enumerate</FILE> +<TITLE>udev_enumerate</TITLE> +udev_enumerate +udev_enumerate_ref +udev_enumerate_unref +udev_enumerate_get_udev +udev_enumerate_new +udev_enumerate_add_match_subsystem +udev_enumerate_add_nomatch_subsystem +udev_enumerate_add_match_sysattr +udev_enumerate_add_nomatch_sysattr +udev_enumerate_add_match_property +udev_enumerate_add_match_tag +udev_enumerate_add_match_parent +udev_enumerate_add_match_is_initialized +udev_enumerate_add_match_sysname +udev_enumerate_add_syspath +udev_enumerate_scan_devices +udev_enumerate_scan_subsystems +udev_enumerate_get_list_entry +</SECTION> + +<SECTION> +<FILE>libudev-queue</FILE> +<TITLE>udev_queue</TITLE> +udev_queue +udev_queue_ref +udev_queue_unref +udev_queue_get_udev +udev_queue_new +udev_queue_get_udev_is_active +udev_queue_get_queue_is_empty +udev_queue_get_seqnum_is_finished +udev_queue_get_seqnum_sequence_is_finished +udev_queue_get_queued_list_entry +udev_queue_get_kernel_seqnum +udev_queue_get_udev_seqnum +</SECTION> + +<SECTION> +<FILE>libudev-util</FILE> +<TITLE>udev_util</TITLE> +udev_util_encode_string +</SECTION> diff --git a/src/udev/src/docs/libudev.types b/src/udev/src/docs/libudev.types new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/udev/src/docs/libudev.types diff --git a/src/udev/src/docs/version.xml.in b/src/udev/src/docs/version.xml.in new file mode 100644 index 000000000..d78bda934 --- /dev/null +++ b/src/udev/src/docs/version.xml.in @@ -0,0 +1 @@ +@VERSION@ diff --git a/src/udev/src/floppy/60-floppy.rules b/src/udev/src/floppy/60-floppy.rules new file mode 100644 index 000000000..53e4a9e59 --- /dev/null +++ b/src/udev/src/floppy/60-floppy.rules @@ -0,0 +1,4 @@ +# do not edit this file, it will be overwritten on update + +SUBSYSTEM=="block", KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", ENV{CMOS_TYPE}="$attr{cmos}", \ + RUN+="create_floppy_devices -c -t $env{CMOS_TYPE} -m %M -M 0660 -G floppy $root/%k" diff --git a/src/udev/src/floppy/create_floppy_devices.c b/src/udev/src/floppy/create_floppy_devices.c new file mode 100644 index 000000000..f71ef0d80 --- /dev/null +++ b/src/udev/src/floppy/create_floppy_devices.c @@ -0,0 +1,177 @@ +/* + * Create all possible floppy device based on the CMOS type. + * Based upon code from drivers/block/floppy.c + * + * Copyright(C) 2005, SUSE Linux Products GmbH + * + * Author: Hannes Reinecke <hare@suse.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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> +#include <pwd.h> +#include <grp.h> + +#include "libudev.h" +#include "libudev-private.h" + +static char *table[] = { + "", "d360", "h1200", "u360", "u720", "h360", "h720", + "u1440", "u2880", "CompaQ", "h1440", "u1680", "h410", + "u820", "h1476", "u1722", "h420", "u830", "h1494", "u1743", + "h880", "u1040", "u1120", "h1600", "u1760", "u1920", + "u3200", "u3520", "u3840", "u1840", "u800", "u1600", + NULL +}; + +static int t360[] = { 1, 0 }; +static int t1200[] = { 2, 5, 6, 10, 12, 14, 16, 18, 20, 23, 0 }; +static int t3in[] = { 8, 9, 26, 27, 28, 7, 11, 15, 19, 24, 25, 29, 31, 3, 4, 13, 17, 21, 22, 30, 0 }; +static int *table_sup[] = { NULL, t360, t1200, t3in+5+8, t3in+5, t3in, t3in }; + +static void log_fn(struct udev *udev, int priority, + const char *file, int line, const char *fn, + const char *format, va_list args) +{ + vsyslog(priority, format, args); +} + +int main(int argc, char **argv) +{ + struct udev *udev; + char *dev; + char *devname; + char node[64]; + int type = 0, i, fdnum, c; + int major = 2, minor; + uid_t uid = 0; + gid_t gid = 0; + mode_t mode = 0660; + int create_nodes = 0; + int print_nodes = 0; + int is_err = 0; + + udev = udev_new(); + if (udev == NULL) + goto exit; + + udev_log_init("create_floppy_devices"); + udev_set_log_fn(udev, log_fn); + udev_selinux_init(udev); + + while ((c = getopt(argc, argv, "cudm:U:G:M:t:")) != -1) { + switch (c) { + case 'c': + create_nodes = 1; + break; + case 'd': + print_nodes = 1; + break; + case 'U': + uid = util_lookup_user(udev, optarg); + break; + case 'G': + gid = util_lookup_group(udev, optarg); + break; + case 'M': + mode = strtol(optarg, NULL, 0); + mode = mode & 0666; + break; + case 'm': + major = strtol(optarg, NULL, 0); + break; + case 't': + type = strtol(optarg, NULL, 0); + break; + default: + is_err++; + break; + } + } + + if (is_err || optind >= argc) { + printf("Usage: %s [OPTION] device\n" + " -c create\n" + " -d debug\n" + " -m Major number\n" + " -t floppy type number\n" + " -U device node user ownership\n" + " -G device node group owner\n" + " -M device node mode\n" + "\n", argv[0]); + return 1; + } + + dev = argv[optind]; + devname = strrchr(dev, '/'); + if (devname != NULL) + devname = &devname[1]; + else + devname = dev; + if (strncmp(devname, "fd", 2) != 0) { + fprintf(stderr,"Device '%s' is not a floppy device\n", dev); + return 1; + } + + fdnum = strtol(&devname[2], NULL, 10); + if (fdnum < 0 || fdnum > 7) { + fprintf(stderr,"Floppy device number %d out of range (0-7)\n", fdnum); + return 1; + } + if (fdnum > 3) + fdnum += 124; + + if (major < 1) { + fprintf(stderr,"Invalid major number %d\n", major); + return 1; + } + + if (type < 0 || type >= (int) ARRAY_SIZE(table_sup)) { + fprintf(stderr,"Invalid CMOS type %d\n", type); + return 1; + } + + if (type == 0) + return 0; + + i = 0; + while (table_sup[type][i]) { + sprintf(node, "%s%s", dev, table[table_sup[type][i]]); + minor = (table_sup[type][i] << 2) + fdnum; + if (print_nodes) + printf("%s b %.4o %d %d\n", node, mode, major, minor); + if (create_nodes) { + unlink(node); + udev_selinux_setfscreatecon(udev, node, S_IFBLK | mode); + mknod(node, S_IFBLK | mode, makedev(major,minor)); + udev_selinux_resetfscreatecon(udev); + chown(node, uid, gid); + chmod(node, S_IFBLK | mode); + } + i++; + } + + udev_selinux_exit(udev); + udev_unref(udev); + udev_log_close(); +exit: + return 0; +} diff --git a/src/udev/src/gudev/.gitignore b/src/udev/src/gudev/.gitignore new file mode 100644 index 000000000..d20fa523e --- /dev/null +++ b/src/udev/src/gudev/.gitignore @@ -0,0 +1,9 @@ +gtk-doc.make +docs/version.xml +gudev-1.0.pc +gudevenumtypes.c +gudevenumtypes.h +gudevmarshal.c +gudevmarshal.h +GUdev-1.0.gir +GUdev-1.0.typelib diff --git a/src/udev/src/gudev/COPYING b/src/udev/src/gudev/COPYING new file mode 100644 index 000000000..da97db2bd --- /dev/null +++ b/src/udev/src/gudev/COPYING @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library 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. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/src/udev/src/gudev/docs/.gitignore b/src/udev/src/gudev/docs/.gitignore new file mode 100644 index 000000000..8eada6d40 --- /dev/null +++ b/src/udev/src/gudev/docs/.gitignore @@ -0,0 +1,16 @@ +gudev-overrides.txt +gudev-decl-list.txt +gudev-decl.txt +gudev-undeclared.txt +gudev-undocumented.txt +gudev-unused.txt +gudev.args +gudev.hierarchy +gudev.interfaces +gudev.prerequisites +gudev.signals +html.stamp +html/* +xml/* +tmpl/* +*.stamp diff --git a/src/udev/src/gudev/docs/Makefile.am b/src/udev/src/gudev/docs/Makefile.am new file mode 100644 index 000000000..cfe696c50 --- /dev/null +++ b/src/udev/src/gudev/docs/Makefile.am @@ -0,0 +1,106 @@ +## Process this file with automake to produce Makefile.in + +# We require automake 1.10 at least. +AUTOMAKE_OPTIONS = 1.10 + +# This is a blank Makefile.am for using gtk-doc. +# Copy this to your project's API docs directory and modify the variables to +# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples +# of using the various options. + +# The name of the module, e.g. 'glib'. +DOC_MODULE=gudev + +# Uncomment for versioned docs and specify the version of the module, e.g. '2'. +#DOC_MODULE_VERSION=2 + +# The top-level SGML file. You can change this if you want to. +DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml + +# The directory containing the source code. Relative to $(srcdir). +# gtk-doc will search all .c & .h files beneath here for inline comments +# documenting the functions and macros. +# e.g. DOC_SOURCE_DIR=../../../gtk +DOC_SOURCE_DIR=$(top_srcdir)/src + +# Extra options to pass to gtkdoc-scangobj. Not normally needed. +SCANGOBJ_OPTIONS= + +# Extra options to supply to gtkdoc-scan. +# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" +SCAN_OPTIONS= + +# Extra options to supply to gtkdoc-mkdb. +# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml +MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space=g_udev + +# Extra options to supply to gtkdoc-mktmpl +# e.g. MKTMPL_OPTIONS=--only-section-tmpl +MKTMPL_OPTIONS= + +# Extra options to supply to gtkdoc-mkhtml +MKHTML_OPTIONS=--path=$(abs_srcdir) --path=$(abs_builddir) + +# Extra options to supply to gtkdoc-fixref. Not normally needed. +# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html +FIXXREF_OPTIONS= + +# Used for dependencies. The docs will be rebuilt if any of these change. +# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h +# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c +HFILE_GLOB=$(top_srcdir)/src/gudev/*.h +CFILE_GLOB=$(top_srcdir)/src/gudev/*.c + +# Extra header to include when scanning, which are not under DOC_SOURCE_DIR +# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h +EXTRA_HFILES= + +# Header files to ignore when scanning. Use base file name, no paths +# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h +IGNORE_HFILES= + +# Images to copy into HTML directory. +# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png +HTML_IMAGES= + +# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). +# e.g. content_files=running.sgml building.sgml changes-2.0.sgml +content_files = version.xml + +# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded +# These files must be listed here *and* in content_files +# e.g. expand_content_files=running.sgml +expand_content_files= + +# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. +# Only needed if you are using gtkdoc-scangobj to dynamically query widget +# signals and properties. +# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) +# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) +GTKDOC_CFLAGS = \ + $(DBUS_GLIB_CFLAGS) \ + $(GLIB_CFLAGS) \ + -I$(top_srcdir)/src/gudev \ + -I$(top_builddir)/src/gudev + +GTKDOC_LIBS = \ + $(GLIB_LIBS) \ + $(top_builddir)/libgudev-1.0.la + +# This includes the standard gtk-doc make rules, copied by gtkdocize. +include $(top_srcdir)/gtk-doc.make + +# Other files to distribute +# e.g. EXTRA_DIST += version.xml.in +EXTRA_DIST += version.xml.in + +# Files not to distribute +# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types +# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt +#DISTCLEANFILES += + +# Comment this out if you want your docs-status tested during 'make check' +if ENABLE_GTK_DOC +#TESTS_ENVIRONMENT = cd $(srcsrc) +#TESTS = $(GTKDOC_CHECK) +endif diff --git a/src/udev/src/gudev/docs/gudev-docs.xml b/src/udev/src/gudev/docs/gudev-docs.xml new file mode 100644 index 000000000..f876c3bc0 --- /dev/null +++ b/src/udev/src/gudev/docs/gudev-docs.xml @@ -0,0 +1,93 @@ +<?xml version="1.0"?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" + "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [ +<!ENTITY version SYSTEM "version.xml"> +]> +<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude"> + <bookinfo> + <title>GUDev Reference Manual</title> + <releaseinfo>For GUdev version &version;</releaseinfo> + <authorgroup> + <author> + <firstname>David</firstname> + <surname>Zeuthen</surname> + <affiliation> + <address> + <email>davidz@redhat.com</email> + </address> + </affiliation> + </author> + <author> + <firstname>Bastien</firstname> + <surname>Nocera</surname> + <affiliation> + <address> + <email>hadess@hadess.net</email> + </address> + </affiliation> + </author> + </authorgroup> + + <copyright> + <year>2011</year> + <holder>The GUDev Authors</holder> + </copyright> + + <legalnotice> + <para> + Permission is granted to copy, distribute and/or modify this + document under the terms of the <citetitle>GNU Free + Documentation License</citetitle>, Version 1.1 or any later + version published by the Free Software Foundation with no + Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. You may obtain a copy of the <citetitle>GNU Free + Documentation License</citetitle> from the Free Software + Foundation by visiting <ulink type="http" + url="http://www.fsf.org">their Web site</ulink> or by writing + to: + + <address> + The Free Software Foundation, Inc., + <street>59 Temple Place</street> - Suite 330, + <city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>, + <country>USA</country> + </address> + </para> + + <para> + Many of the names used by companies to distinguish their + products and services are claimed as trademarks. Where those + names appear in any freedesktop.org documentation, and those + trademarks are made aware to the members of the + freedesktop.org Project, the names have been printed in caps + or initial caps. + </para> + </legalnotice> + </bookinfo> + + <reference id="ref-API"> + <title>API Reference</title> + <partintro> + <para> + This part presents the class and function reference for the + <literal>libgudev</literal> library. + </para> + </partintro> + <xi:include href="xml/gudevclient.xml"/> + <xi:include href="xml/gudevdevice.xml"/> + <xi:include href="xml/gudevenumerator.xml"/> + </reference> + + <chapter id="gudev-hierarchy"> + <title>Object Hierarchy</title> + <xi:include href="xml/tree_index.sgml"/> + </chapter> + <index> + <title>Index</title> + </index> + <index role="165"> + <title>Index of new symbols in 165</title> + <xi:include href="xml/api-index-165.xml"><xi:fallback /></xi:include> + </index> + +</book> diff --git a/src/udev/src/gudev/docs/gudev-sections.txt b/src/udev/src/gudev/docs/gudev-sections.txt new file mode 100644 index 000000000..213e1a746 --- /dev/null +++ b/src/udev/src/gudev/docs/gudev-sections.txt @@ -0,0 +1,113 @@ +<SECTION> +<FILE>gudevclient</FILE> +<TITLE>GUdevClient</TITLE> +GUdevClient +GUdevClientClass +GUdevDeviceType +GUdevDeviceNumber +g_udev_client_new +g_udev_client_query_by_subsystem +g_udev_client_query_by_device_number +g_udev_client_query_by_device_file +g_udev_client_query_by_sysfs_path +g_udev_client_query_by_subsystem_and_name +<SUBSECTION Standard> +G_UDEV_CLIENT +G_UDEV_IS_CLIENT +G_UDEV_TYPE_CLIENT +g_udev_client_get_type +G_UDEV_CLIENT_CLASS +G_UDEV_IS_CLIENT_CLASS +G_UDEV_CLIENT_GET_CLASS +<SUBSECTION Private> +GUdevClientPrivate +</SECTION> + +<SECTION> +<FILE>gudevdevice</FILE> +<TITLE>GUdevDevice</TITLE> +GUdevDevice +GUdevDeviceClass +g_udev_device_get_subsystem +g_udev_device_get_devtype +g_udev_device_get_name +g_udev_device_get_number +g_udev_device_get_sysfs_path +g_udev_device_get_driver +g_udev_device_get_action +g_udev_device_get_seqnum +g_udev_device_get_device_type +g_udev_device_get_device_number +g_udev_device_get_device_file +g_udev_device_get_device_file_symlinks +g_udev_device_get_parent +g_udev_device_get_parent_with_subsystem +g_udev_device_get_tags +g_udev_device_get_is_initialized +g_udev_device_get_usec_since_initialized +g_udev_device_get_property_keys +g_udev_device_has_property +g_udev_device_get_property +g_udev_device_get_property_as_int +g_udev_device_get_property_as_uint64 +g_udev_device_get_property_as_double +g_udev_device_get_property_as_boolean +g_udev_device_get_property_as_strv +g_udev_device_get_sysfs_attr +g_udev_device_get_sysfs_attr_as_int +g_udev_device_get_sysfs_attr_as_uint64 +g_udev_device_get_sysfs_attr_as_double +g_udev_device_get_sysfs_attr_as_boolean +g_udev_device_get_sysfs_attr_as_strv +<SUBSECTION Standard> +G_UDEV_DEVICE +G_UDEV_IS_DEVICE +G_UDEV_TYPE_DEVICE +g_udev_device_get_type +G_UDEV_DEVICE_CLASS +G_UDEV_IS_DEVICE_CLASS +G_UDEV_DEVICE_GET_CLASS +<SUBSECTION Private> +GUdevDevicePrivate +</SECTION> + +<SECTION> +<FILE>gudevenumerator</FILE> +<TITLE>GUdevEnumerator</TITLE> +GUdevEnumerator +GUdevEnumeratorClass +g_udev_enumerator_new +g_udev_enumerator_add_match_subsystem +g_udev_enumerator_add_nomatch_subsystem +g_udev_enumerator_add_match_sysfs_attr +g_udev_enumerator_add_nomatch_sysfs_attr +g_udev_enumerator_add_match_property +g_udev_enumerator_add_match_name +g_udev_enumerator_add_match_tag +g_udev_enumerator_add_match_is_initialized +g_udev_enumerator_add_sysfs_path +g_udev_enumerator_execute +<SUBSECTION Standard> +G_UDEV_ENUMERATOR +G_UDEV_IS_ENUMERATOR +G_UDEV_TYPE_ENUMERATOR +g_udev_enumerator_get_type +G_UDEV_ENUMERATOR_CLASS +G_UDEV_IS_ENUMERATOR_CLASS +G_UDEV_ENUMERATOR_GET_CLASS +<SUBSECTION Private> +GUdevEnumeratorPrivate +</SECTION> + +<SECTION> +<FILE>gudevmarshal</FILE> +<SUBSECTION Private> +g_udev_marshal_VOID__STRING_OBJECT +</SECTION> + +<SECTION> +<FILE>gudevenumtypes</FILE> +<SUBSECTION Private> +G_TYPE_UDEV_DEVICE_TYPE +g_udev_device_type_get_type +</SECTION> diff --git a/src/udev/src/gudev/docs/gudev.types b/src/udev/src/gudev/docs/gudev.types new file mode 100644 index 000000000..a89857a04 --- /dev/null +++ b/src/udev/src/gudev/docs/gudev.types @@ -0,0 +1,4 @@ +g_udev_device_type_get_type +g_udev_device_get_type +g_udev_client_get_type +g_udev_enumerator_get_type diff --git a/src/udev/src/gudev/docs/version.xml.in b/src/udev/src/gudev/docs/version.xml.in new file mode 100644 index 000000000..d78bda934 --- /dev/null +++ b/src/udev/src/gudev/docs/version.xml.in @@ -0,0 +1 @@ +@VERSION@ diff --git a/src/udev/src/gudev/gjs-example.js b/src/udev/src/gudev/gjs-example.js new file mode 100755 index 000000000..5586fd6a6 --- /dev/null +++ b/src/udev/src/gudev/gjs-example.js @@ -0,0 +1,75 @@ +#!/usr/bin/env gjs-console + +// This currently depends on the following patches to gjs +// +// http://bugzilla.gnome.org/show_bug.cgi?id=584558 +// http://bugzilla.gnome.org/show_bug.cgi?id=584560 +// http://bugzilla.gnome.org/show_bug.cgi?id=584568 + +const GUdev = imports.gi.GUdev; +const Mainloop = imports.mainloop; + +function print_device (device) { + print (" subsystem: " + device.get_subsystem ()); + print (" devtype: " + device.get_devtype ()); + print (" name: " + device.get_name ()); + print (" number: " + device.get_number ()); + print (" sysfs_path: " + device.get_sysfs_path ()); + print (" driver: " + device.get_driver ()); + print (" action: " + device.get_action ()); + print (" seqnum: " + device.get_seqnum ()); + print (" device type: " + device.get_device_type ()); + print (" device number: " + device.get_device_number ()); + print (" device file: " + device.get_device_file ()); + print (" device file symlinks: " + device.get_device_file_symlinks ()); + print (" foo: " + device.get_sysfs_attr_as_strv ("stat")); + var keys = device.get_property_keys (); + for (var n = 0; n < keys.length; n++) { + print (" " + keys[n] + "=" + device.get_property (keys[n])); + } +} + +function on_uevent (client, action, device) { + print ("action " + action + " on device " + device.get_sysfs_path()); + print_device (device); + print (""); +} + +var client = new GUdev.Client ({subsystems: ["block", "usb/usb_interface"]}); +client.connect ("uevent", on_uevent); + +var block_devices = client.query_by_subsystem ("block"); +for (var n = 0; n < block_devices.length; n++) { + print ("block device: " + block_devices[n].get_device_file ()); +} + +var d; + +d = client.query_by_device_number (GUdev.DeviceType.BLOCK, 0x0810); +if (d == null) { + print ("query_by_device_number 0x810 -> null"); +} else { + print ("query_by_device_number 0x810 -> " + d.get_device_file ()); + var dd = d.get_parent_with_subsystem ("usb", null); + print_device (dd); + print ("--------------------------------------------------------------------------"); + while (d != null) { + print_device (d); + print (""); + d = d.get_parent (); + } +} + +d = client.query_by_sysfs_path ("/sys/block/sda/sda1"); +print ("query_by_sysfs_path (\"/sys/block/sda1\") -> " + d.get_device_file ()); + +d = client.query_by_subsystem_and_name ("block", "sda2"); +print ("query_by_subsystem_and_name (\"block\", \"sda2\") -> " + d.get_device_file ()); + +d = client.query_by_device_file ("/dev/sda"); +print ("query_by_device_file (\"/dev/sda\") -> " + d.get_device_file ()); + +d = client.query_by_device_file ("/dev/block/8:0"); +print ("query_by_device_file (\"/dev/block/8:0\") -> " + d.get_device_file ()); + +Mainloop.run('udev-example'); diff --git a/src/udev/src/gudev/gudev-1.0.pc.in b/src/udev/src/gudev/gudev-1.0.pc.in new file mode 100644 index 000000000..058262d76 --- /dev/null +++ b/src/udev/src/gudev/gudev-1.0.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: gudev-1.0 +Description: GObject bindings for libudev +Version: @VERSION@ +Requires: glib-2.0, gobject-2.0 +Libs: -L${libdir} -lgudev-1.0 +Cflags: -I${includedir}/gudev-1.0 diff --git a/src/udev/src/gudev/gudev.h b/src/udev/src/gudev/gudev.h new file mode 100644 index 000000000..a31346081 --- /dev/null +++ b/src/udev/src/gudev/gudev.h @@ -0,0 +1,33 @@ +/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> + * + * This library 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 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __G_UDEV_H__ +#define __G_UDEV_H__ + +#define _GUDEV_INSIDE_GUDEV_H 1 +#include <gudev/gudevenums.h> +#include <gudev/gudevenumtypes.h> +#include <gudev/gudevtypes.h> +#include <gudev/gudevclient.h> +#include <gudev/gudevdevice.h> +#include <gudev/gudevenumerator.h> +#undef _GUDEV_INSIDE_GUDEV_H + +#endif /* __G_UDEV_H__ */ diff --git a/src/udev/src/gudev/gudevclient.c b/src/udev/src/gudev/gudevclient.c new file mode 100644 index 000000000..2b94102ac --- /dev/null +++ b/src/udev/src/gudev/gudevclient.c @@ -0,0 +1,527 @@ +/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2008-2010 David Zeuthen <davidz@redhat.com> + * + * This library 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 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdlib.h> +#include <string.h> + +#include "gudevclient.h" +#include "gudevdevice.h" +#include "gudevmarshal.h" +#include "gudevprivate.h" + +/** + * SECTION:gudevclient + * @short_description: Query devices and listen to uevents + * + * #GUdevClient is used to query information about devices on a Linux + * system from the Linux kernel and the udev device + * manager. + * + * Device information is retrieved from the kernel (through the + * <literal>sysfs</literal> filesystem) and the udev daemon (through a + * <literal>tmpfs</literal> filesystem) and presented through + * #GUdevDevice objects. This means that no blocking IO ever happens + * (in both cases, we are essentially just reading data from kernel + * memory) and as such there are no asynchronous versions of the + * provided methods. + * + * To get #GUdevDevice objects, use + * g_udev_client_query_by_subsystem(), + * g_udev_client_query_by_device_number(), + * g_udev_client_query_by_device_file(), + * g_udev_client_query_by_sysfs_path(), + * g_udev_client_query_by_subsystem_and_name() + * or the #GUdevEnumerator type. + * + * To listen to uevents, connect to the #GUdevClient::uevent signal. + */ + +struct _GUdevClientPrivate +{ + GSource *watch_source; + struct udev *udev; + struct udev_monitor *monitor; + + gchar **subsystems; +}; + +enum +{ + PROP_0, + PROP_SUBSYSTEMS, +}; + +enum +{ + UEVENT_SIGNAL, + LAST_SIGNAL, +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + +G_DEFINE_TYPE (GUdevClient, g_udev_client, G_TYPE_OBJECT) + +/* ---------------------------------------------------------------------------------------------------- */ + +static gboolean +monitor_event (GIOChannel *source, + GIOCondition condition, + gpointer data) +{ + GUdevClient *client = (GUdevClient *) data; + GUdevDevice *device; + struct udev_device *udevice; + + if (client->priv->monitor == NULL) + goto out; + udevice = udev_monitor_receive_device (client->priv->monitor); + if (udevice == NULL) + goto out; + + device = _g_udev_device_new (udevice); + udev_device_unref (udevice); + g_signal_emit (client, + signals[UEVENT_SIGNAL], + 0, + g_udev_device_get_action (device), + device); + g_object_unref (device); + + out: + return TRUE; +} + +static void +g_udev_client_finalize (GObject *object) +{ + GUdevClient *client = G_UDEV_CLIENT (object); + + if (client->priv->watch_source != NULL) + { + g_source_destroy (client->priv->watch_source); + client->priv->watch_source = NULL; + } + + if (client->priv->monitor != NULL) + { + udev_monitor_unref (client->priv->monitor); + client->priv->monitor = NULL; + } + + if (client->priv->udev != NULL) + { + udev_unref (client->priv->udev); + client->priv->udev = NULL; + } + + g_strfreev (client->priv->subsystems); + + if (G_OBJECT_CLASS (g_udev_client_parent_class)->finalize != NULL) + G_OBJECT_CLASS (g_udev_client_parent_class)->finalize (object); +} + +static void +g_udev_client_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GUdevClient *client = G_UDEV_CLIENT (object); + + switch (prop_id) + { + case PROP_SUBSYSTEMS: + if (client->priv->subsystems != NULL) + g_strfreev (client->priv->subsystems); + client->priv->subsystems = g_strdupv (g_value_get_boxed (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +g_udev_client_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GUdevClient *client = G_UDEV_CLIENT (object); + + switch (prop_id) + { + case PROP_SUBSYSTEMS: + g_value_set_boxed (value, client->priv->subsystems); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +g_udev_client_constructed (GObject *object) +{ + GUdevClient *client = G_UDEV_CLIENT (object); + GIOChannel *channel; + guint n; + + client->priv->udev = udev_new (); + + /* connect to event source */ + client->priv->monitor = udev_monitor_new_from_netlink (client->priv->udev, "udev"); + + //g_debug ("ss = %p", client->priv->subsystems); + + if (client->priv->subsystems != NULL) + { + /* install subsystem filters to only wake up for certain events */ + for (n = 0; client->priv->subsystems[n] != NULL; n++) + { + gchar *subsystem; + gchar *devtype; + gchar *s; + + subsystem = g_strdup (client->priv->subsystems[n]); + devtype = NULL; + + //g_debug ("s = '%s'", subsystem); + + s = strstr (subsystem, "/"); + if (s != NULL) + { + devtype = s + 1; + *s = '\0'; + } + + if (client->priv->monitor != NULL) + udev_monitor_filter_add_match_subsystem_devtype (client->priv->monitor, subsystem, devtype); + + g_free (subsystem); + } + + /* listen to events, and buffer them */ + if (client->priv->monitor != NULL) + { + udev_monitor_enable_receiving (client->priv->monitor); + channel = g_io_channel_unix_new (udev_monitor_get_fd (client->priv->monitor)); + client->priv->watch_source = g_io_create_watch (channel, G_IO_IN); + g_io_channel_unref (channel); + g_source_set_callback (client->priv->watch_source, (GSourceFunc) monitor_event, client, NULL); + g_source_attach (client->priv->watch_source, g_main_context_get_thread_default ()); + g_source_unref (client->priv->watch_source); + } + else + { + client->priv->watch_source = NULL; + } + } + + if (G_OBJECT_CLASS (g_udev_client_parent_class)->constructed != NULL) + G_OBJECT_CLASS (g_udev_client_parent_class)->constructed (object); +} + + +static void +g_udev_client_class_init (GUdevClientClass *klass) +{ + GObjectClass *gobject_class = (GObjectClass *) klass; + + gobject_class->constructed = g_udev_client_constructed; + gobject_class->set_property = g_udev_client_set_property; + gobject_class->get_property = g_udev_client_get_property; + gobject_class->finalize = g_udev_client_finalize; + + /** + * GUdevClient:subsystems: + * + * The subsystems to listen for uevents on. + * + * To listen for only a specific DEVTYPE for a given SUBSYSTEM, use + * "subsystem/devtype". For example, to only listen for uevents + * where SUBSYSTEM is usb and DEVTYPE is usb_interface, use + * "usb/usb_interface". + * + * If this property is %NULL, then no events will be reported. If + * it's the empty array, events from all subsystems will be + * reported. + */ + g_object_class_install_property (gobject_class, + PROP_SUBSYSTEMS, + g_param_spec_boxed ("subsystems", + "The subsystems to listen for changes on", + "The subsystems to listen for changes on", + G_TYPE_STRV, + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE)); + + /** + * GUdevClient::uevent: + * @client: The #GUdevClient receiving the event. + * @action: The action for the uevent e.g. "add", "remove", "change", "move", etc. + * @device: Details about the #GUdevDevice the event is for. + * + * Emitted when @client receives an uevent. + * + * This signal is emitted in the + * <link linkend="g-main-context-push-thread-default">thread-default main loop</link> + * of the thread that @client was created in. + */ + signals[UEVENT_SIGNAL] = g_signal_new ("uevent", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GUdevClientClass, uevent), + NULL, + NULL, + g_udev_marshal_VOID__STRING_OBJECT, + G_TYPE_NONE, + 2, + G_TYPE_STRING, + G_UDEV_TYPE_DEVICE); + + g_type_class_add_private (klass, sizeof (GUdevClientPrivate)); +} + +static void +g_udev_client_init (GUdevClient *client) +{ + client->priv = G_TYPE_INSTANCE_GET_PRIVATE (client, + G_UDEV_TYPE_CLIENT, + GUdevClientPrivate); +} + +/** + * g_udev_client_new: + * @subsystems: (array zero-terminated=1) (element-type utf8) (transfer none) (allow-none): A %NULL terminated string array of subsystems to listen for uevents on, %NULL to not listen on uevents at all, or an empty array to listen to uevents on all subsystems. See the documentation for the #GUdevClient:subsystems property for details on this parameter. + * + * Constructs a #GUdevClient object that can be used to query + * information about devices. Connect to the #GUdevClient::uevent + * signal to listen for uevents. Note that signals are emitted in the + * <link linkend="g-main-context-push-thread-default">thread-default main loop</link> + * of the thread that you call this constructor from. + * + * Returns: A new #GUdevClient object. Free with g_object_unref(). + */ +GUdevClient * +g_udev_client_new (const gchar * const *subsystems) +{ + return G_UDEV_CLIENT (g_object_new (G_UDEV_TYPE_CLIENT, "subsystems", subsystems, NULL)); +} + +/** + * g_udev_client_query_by_subsystem: + * @client: A #GUdevClient. + * @subsystem: (allow-none): The subsystem to get devices for or %NULL to get all devices. + * + * Gets all devices belonging to @subsystem. + * + * Returns: (element-type GUdevDevice) (transfer full): A list of #GUdevDevice objects. The caller should free the result by using g_object_unref() on each element in the list and then g_list_free() on the list. + */ +GList * +g_udev_client_query_by_subsystem (GUdevClient *client, + const gchar *subsystem) +{ + struct udev_enumerate *enumerate; + struct udev_list_entry *l, *devices; + GList *ret; + + g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); + + ret = NULL; + + /* prepare a device scan */ + enumerate = udev_enumerate_new (client->priv->udev); + + /* filter for subsystem */ + if (subsystem != NULL) + udev_enumerate_add_match_subsystem (enumerate, subsystem); + /* retrieve the list */ + udev_enumerate_scan_devices (enumerate); + + /* add devices to the list */ + devices = udev_enumerate_get_list_entry (enumerate); + for (l = devices; l != NULL; l = udev_list_entry_get_next (l)) + { + struct udev_device *udevice; + GUdevDevice *device; + + udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerate), + udev_list_entry_get_name (l)); + if (udevice == NULL) + continue; + device = _g_udev_device_new (udevice); + udev_device_unref (udevice); + ret = g_list_prepend (ret, device); + } + udev_enumerate_unref (enumerate); + + ret = g_list_reverse (ret); + + return ret; +} + +/** + * g_udev_client_query_by_device_number: + * @client: A #GUdevClient. + * @type: A value from the #GUdevDeviceType enumeration. + * @number: A device number. + * + * Looks up a device for a type and device number. + * + * Returns: (transfer full): A #GUdevDevice object or %NULL if the device was not found. Free with g_object_unref(). + */ +GUdevDevice * +g_udev_client_query_by_device_number (GUdevClient *client, + GUdevDeviceType type, + GUdevDeviceNumber number) +{ + struct udev_device *udevice; + GUdevDevice *device; + + g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); + + device = NULL; + udevice = udev_device_new_from_devnum (client->priv->udev, type, number); + + if (udevice == NULL) + goto out; + + device = _g_udev_device_new (udevice); + udev_device_unref (udevice); + + out: + return device; +} + +/** + * g_udev_client_query_by_device_file: + * @client: A #GUdevClient. + * @device_file: A device file. + * + * Looks up a device for a device file. + * + * Returns: (transfer full): A #GUdevDevice object or %NULL if the device was not found. Free with g_object_unref(). + */ +GUdevDevice * +g_udev_client_query_by_device_file (GUdevClient *client, + const gchar *device_file) +{ + struct stat stat_buf; + GUdevDevice *device; + + g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); + g_return_val_if_fail (device_file != NULL, NULL); + + device = NULL; + + if (stat (device_file, &stat_buf) != 0) + goto out; + + if (stat_buf.st_rdev == 0) + goto out; + + if (S_ISBLK (stat_buf.st_mode)) + device = g_udev_client_query_by_device_number (client, G_UDEV_DEVICE_TYPE_BLOCK, stat_buf.st_rdev); + else if (S_ISCHR (stat_buf.st_mode)) + device = g_udev_client_query_by_device_number (client, G_UDEV_DEVICE_TYPE_CHAR, stat_buf.st_rdev); + + out: + return device; +} + +/** + * g_udev_client_query_by_sysfs_path: + * @client: A #GUdevClient. + * @sysfs_path: A sysfs path. + * + * Looks up a device for a sysfs path. + * + * Returns: (transfer full): A #GUdevDevice object or %NULL if the device was not found. Free with g_object_unref(). + */ +GUdevDevice * +g_udev_client_query_by_sysfs_path (GUdevClient *client, + const gchar *sysfs_path) +{ + struct udev_device *udevice; + GUdevDevice *device; + + g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); + g_return_val_if_fail (sysfs_path != NULL, NULL); + + device = NULL; + udevice = udev_device_new_from_syspath (client->priv->udev, sysfs_path); + if (udevice == NULL) + goto out; + + device = _g_udev_device_new (udevice); + udev_device_unref (udevice); + + out: + return device; +} + +/** + * g_udev_client_query_by_subsystem_and_name: + * @client: A #GUdevClient. + * @subsystem: A subsystem name. + * @name: The name of the device. + * + * Looks up a device for a subsystem and name. + * + * Returns: (transfer full): A #GUdevDevice object or %NULL if the device was not found. Free with g_object_unref(). + */ +GUdevDevice * +g_udev_client_query_by_subsystem_and_name (GUdevClient *client, + const gchar *subsystem, + const gchar *name) +{ + struct udev_device *udevice; + GUdevDevice *device; + + g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); + g_return_val_if_fail (subsystem != NULL, NULL); + g_return_val_if_fail (name != NULL, NULL); + + device = NULL; + udevice = udev_device_new_from_subsystem_sysname (client->priv->udev, subsystem, name); + if (udevice == NULL) + goto out; + + device = _g_udev_device_new (udevice); + udev_device_unref (udevice); + + out: + return device; +} + +struct udev * +_g_udev_client_get_udev (GUdevClient *client) +{ + g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL); + return client->priv->udev; +} diff --git a/src/udev/src/gudev/gudevclient.h b/src/udev/src/gudev/gudevclient.h new file mode 100644 index 000000000..b425d03d4 --- /dev/null +++ b/src/udev/src/gudev/gudevclient.h @@ -0,0 +1,100 @@ +/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> + * + * This library 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 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H) +#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents." +#endif + +#ifndef __G_UDEV_CLIENT_H__ +#define __G_UDEV_CLIENT_H__ + +#include <gudev/gudevtypes.h> + +G_BEGIN_DECLS + +#define G_UDEV_TYPE_CLIENT (g_udev_client_get_type ()) +#define G_UDEV_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_CLIENT, GUdevClient)) +#define G_UDEV_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_CLIENT, GUdevClientClass)) +#define G_UDEV_IS_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_CLIENT)) +#define G_UDEV_IS_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_CLIENT)) +#define G_UDEV_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_CLIENT, GUdevClientClass)) + +typedef struct _GUdevClientClass GUdevClientClass; +typedef struct _GUdevClientPrivate GUdevClientPrivate; + +/** + * GUdevClient: + * + * The #GUdevClient struct is opaque and should not be accessed directly. + */ +struct _GUdevClient +{ + GObject parent; + + /*< private >*/ + GUdevClientPrivate *priv; +}; + +/** + * GUdevClientClass: + * @parent_class: Parent class. + * @uevent: Signal class handler for the #GUdevClient::uevent signal. + * + * Class structure for #GUdevClient. + */ +struct _GUdevClientClass +{ + GObjectClass parent_class; + + /* signals */ + void (*uevent) (GUdevClient *client, + const gchar *action, + GUdevDevice *device); + + /*< private >*/ + /* Padding for future expansion */ + void (*reserved1) (void); + void (*reserved2) (void); + void (*reserved3) (void); + void (*reserved4) (void); + void (*reserved5) (void); + void (*reserved6) (void); + void (*reserved7) (void); + void (*reserved8) (void); +}; + +GType g_udev_client_get_type (void) G_GNUC_CONST; +GUdevClient *g_udev_client_new (const gchar* const *subsystems); +GList *g_udev_client_query_by_subsystem (GUdevClient *client, + const gchar *subsystem); +GUdevDevice *g_udev_client_query_by_device_number (GUdevClient *client, + GUdevDeviceType type, + GUdevDeviceNumber number); +GUdevDevice *g_udev_client_query_by_device_file (GUdevClient *client, + const gchar *device_file); +GUdevDevice *g_udev_client_query_by_sysfs_path (GUdevClient *client, + const gchar *sysfs_path); +GUdevDevice *g_udev_client_query_by_subsystem_and_name (GUdevClient *client, + const gchar *subsystem, + const gchar *name); + +G_END_DECLS + +#endif /* __G_UDEV_CLIENT_H__ */ diff --git a/src/udev/src/gudev/gudevdevice.c b/src/udev/src/gudev/gudevdevice.c new file mode 100644 index 000000000..62a26f99b --- /dev/null +++ b/src/udev/src/gudev/gudevdevice.c @@ -0,0 +1,963 @@ +/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2008 David Zeuthen <davidz@redhat.com> + * + * This library 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 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdlib.h> +#include <string.h> + +#include "gudevdevice.h" +#include "gudevprivate.h" + +/** + * SECTION:gudevdevice + * @short_description: Get information about a device + * + * The #GUdevDevice class is used to get information about a specific + * device. Note that you cannot instantiate a #GUdevDevice object + * yourself. Instead you must use #GUdevClient to obtain #GUdevDevice + * objects. + * + * To get basic information about a device, use + * g_udev_device_get_subsystem(), g_udev_device_get_d |