13 desc="Configure the LUN for device mode USB mass storage"
14 rcvar="cfumass_enable"
16 start_cmd="${name}_start"
17 stop_cmd="${name}_stop"
19 extra_commands="reload"
20 reload_cmd="${name}_start"
22 : ${cfumass_dir:=/var/cfumass}
23 : ${cfumass_image:=/var/tmp/cfumass.img}
24 : ${cfumass_vendor:="FreeBSD"}
25 : ${cfumass_product:="cfumass(4)"}
31 _luns=`ctladm devlist -b block -v | awk '
37 $1 == "file='"${cfumass_image}"'" {
41 for _lun in ${_luns}; do
42 ctladm remove -b block -l "${_lun}" > /dev/null
48 local err _files _template _new_template
50 if [ ! -d "${cfumass_dir}" ]; then
51 warn "${cfumass_dir} does not exist"
55 _files=`find "${cfumass_dir}" -newer "${cfumass_image}" -print 2> /dev/null`
56 if [ ! -e "${cfumass_image}" -o -n "${_files}" ]; then
57 # The image doesn't exist or is out of date.
58 makefs -t cd9660 -o label="${cfumass_vendor}" \
59 -o rockridge "${cfumass_image}" "${cfumass_dir}"
61 if [ "${err}" -ne 0 ]; then
62 warn "unable to create ${cfumass_image}"
69 ctladm create -b block -o file="${cfumass_image}" -o readonly=on \
70 -o vendor="${cfumass_vendor}" -o product="${cfumass_product}" \
73 if [ "${err}" -ne 0 ]; then
74 warn "unable to create CTL LUN"
78 load_kld -e cfumass cfumass
80 # If the template is already switched to Mass Storage, then reset
81 # it to -1 to force the host to reenumerate it; otherwise it might
82 # not notice the new LUN.
83 _template=`sysctl -n hw.usb.template`
84 if [ "${_template}" -eq 0 ]; then
85 sysctl hw.usb.template=-1 > /dev/null
87 if [ "${err}" -ne 0 ]; then
88 warn "unable to set hw.usb.template sysctl"
93 # Set the template number based on the current one.
94 _template=`sysctl -n hw.usb.template`
95 case "${_template}" in
103 warn "hw.usb.template sysctl set to neither -1 nor 8; not changing"
108 if [ -n "${_new_template}" ]; then
109 sysctl hw.usb.template="${_new_template}" > /dev/null
111 if [ "${err}" -ne 0 ]; then
112 warn "unable to set hw.usb.template sysctl to ${_new_template}"
120 local err _template _new_template
124 _template=`sysctl -n hw.usb.template`
125 case "${_template}" in
133 warn "hw.usb.template sysctl set to neither 0 nor 10; not changing"
138 if [ -n "${_new_template}" ]; then
139 sysctl hw.usb.template="${_new_template}" > /dev/null
141 if [ "${err}" -ne 0 ]; then
142 warn "unable to set hw.usb.template sysctl to ${_new_template}"