#!/sbin/runscript # Copyright 1999-2003 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License v2 # $Header: $ depend() { need localmount } # Depending on the kernel version, the packet devices have the # following format (where {#} is the minor block number): # < 2.6.8: /dev/pktcdvd{#} (all devices in /dev) # >= 2.6.8: /dev/pktcdvd/{#} (all devices in /dev/pktcdvd) # The pktsetup program doesn't seem to return any error codes; # only error messages. So, we do our best to see whether the # block device has been set up or torn down correctly. # This method is not terribly elegent. Blech. start() { local cdrw_dev="" local errmsg="" local minor=0 local retval=0 local last_result=0 /sbin/modprobe -a pktcdvd && sleep 5 # udev is propagating devices. zzzzz.... for cdrw_dev in ${cdrw_list} do ebegin "Enabling CD-RW packet writing on ${cdrw_dev}" # Starting with kernel 2.6.8 there is a different syntax # for the pktsetup program. if [ "$(get_KV)" -ge "$(KV_to_int '2.6.8')" ] then errmsg=$(/usr/bin/pktsetup ${minor} ${cdrw_dev} 2>&1) else errmsg=$(/usr/bin/pktsetup /dev/pktcdvd${minor} ${cdrw_dev} 2>&1) fi if [ -z "${errmsg}" ] then last_result=0 else last_result=1 fi retval=$(( ${retval} + ${last_result} )) minor=$(( ${minor} + 1 )) if [ ${last_result} -gt 0 ] then ewend ${last_result} "Failed to enable packet writing on ${cdrw_dev}: ${errmsg}" fi done eend ${retval} } stop() { local cdrw_dev="" local errmsg="" local minor=0 local retval=0 local last_result=0 for cdrw_dev in ${cdrw_list} do ebegin "Disabling CD-RW packet writing on ${cdrw_dev}" # We need to dismount the cdrw drive before we're allowed # to deallocate the block device. if [ "$(get_KV)" -ge "$(KV_to_int '2.6.8')" ] then umount /dev/pktcdvd/${minor} >/dev/null 2>&1 || true errmsg=$(/usr/bin/pktsetup -d ${minor} 2>&1) else umount /dev/pktcdvd${minor} >/dev/null 2>&1 || true errmsg=$(/usr/bin/pktsetup -d /dev/pktcdvd${minor} ${cdrw_dev} 2>&1) fi if [ -z "${errmsg}" ] then last_result=0 else last_result=1 fi retval=$(( ${retval} + ${last_result} )) minor=$(( ${minor} + 1 )) if [ ${last_result} -gt 0 ] then ewend ${last_result} "Failed to disable packet writing on ${cdrw_dev}: ${errmsg}" fi done /sbin/modprobe -r pktcdvd eend ${retval} }