provide a new 'bluetooth' rc.d script, to handle Bluetooth configuration

in a simpler manner. This replaces btattach, btconfig, bthcid, btdevctl
and sdpd scripts, and also should not require any configuration settings
other than "bluetooth=YES", though the full range of configurations is
still possible.
This commit is contained in:
plunky 2011-05-27 09:28:41 +00:00
parent 11df8c9248
commit b52bb12959
13 changed files with 213 additions and 256 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: mi,v 1.223 2011/04/11 22:09:56 martin Exp $
# $NetBSD: mi,v 1.224 2011/05/27 09:28:41 plunky Exp $
#
# Note: end-user configuration files that are moved to another location
# should not be marked "obsolete"; they should just be removed from
@ -170,13 +170,14 @@
./etc/rc.d/altqd etc-router-rc
./etc/rc.d/amd etc-amd-rc
./etc/rc.d/apmd etc-sys-rc
./etc/rc.d/bluetooth etc-sys-rc
./etc/rc.d/bootconf.sh etc-sys-rc
./etc/rc.d/bootparams etc-bootserver-rc
./etc/rc.d/btattach etc-sys-rc
./etc/rc.d/btconfig etc-sys-rc
./etc/rc.d/btattach etc-obsolete obsolete
./etc/rc.d/btconfig etc-obsolete obsolete
./etc/rc.d/btcontrol etc-obsolete obsolete
./etc/rc.d/btdevctl etc-sys-rc
./etc/rc.d/bthcid etc-sys-rc
./etc/rc.d/btdevctl etc-obsolete obsolete
./etc/rc.d/bthcid etc-obsolete obsolete
./etc/rc.d/btuartd etc-obsolete obsolete
./etc/rc.d/ccd etc-sys-rc
./etc/rc.d/cgd etc-sys-rc
@ -265,7 +266,7 @@
./etc/rc.d/rwho etc-net-rc
./etc/rc.d/savecore etc-sys-rc
./etc/rc.d/screenblank etc-sys-rc
./etc/rc.d/sdpd etc-sys-rc
./etc/rc.d/sdpd etc-obsolete obsolete
./etc/rc.d/securelevel etc-sys-rc
./etc/rc.d/sshd etc-secsh-rc
./etc/rc.d/staticroute etc-sys-rc

View File

@ -1,4 +1,4 @@
# $NetBSD: rc.conf,v 1.112 2011/02/18 00:42:20 jmcneill Exp $
# $NetBSD: rc.conf,v 1.113 2011/05/27 09:28:42 plunky Exp $
#
# /etc/defaults/rc.conf --
# default configuration of /etc/rc.conf
@ -306,12 +306,12 @@ wpa_supplicant=NO wpa_supplicant_flags="-B" # -i<if> -c<file>
# ISDN daemon
isdnd=NO isdnd_flags=""
# Bluetooth daemons
btattach=NO # Bluetooth attach serial HCI
btconfig=NO # Bluetooth controller configuration
btdevctl=NO # Bluetooth device configuration
bthcid=NO bthcid_flags="" # Bluetooth HCI daemon
sdpd=NO sdpd_flags="" # Service Discovery daemon
# Bluetooth configuration
bluetooth=NO
# and the following are used when bluetooth=YES
btconfig_devices="" # all
bthcid=YES bthcid_flags=""
sdpd=YES sdpd_flags=""
# Other daemons.
#

View File

@ -1,4 +1,4 @@
# $NetBSD: special,v 1.137 2011/04/17 13:07:18 martin Exp $
# $NetBSD: special,v 1.138 2011/05/27 09:28:42 plunky Exp $
# @(#)special 8.2 (Berkeley) 1/23/94
#
# This file may be overwritten on upgrades.
@ -186,12 +186,9 @@
./etc/rc.d/altqd type=file mode=0555
./etc/rc.d/amd type=file mode=0555
./etc/rc.d/apmd type=file mode=0555
./etc/rc.d/bluetooth type=file mode=0555
./etc/rc.d/bootconf.sh type=file mode=0555
./etc/rc.d/bootparams type=file mode=0555
./etc/rc.d/btattach type=file mode=0555
./etc/rc.d/btconfig type=file mode=0555
./etc/rc.d/btdevctl type=file mode=0555
./etc/rc.d/bthcid type=file mode=0555
./etc/rc.d/ccd type=file mode=0555
./etc/rc.d/cgd type=file mode=0555
./etc/rc.d/cleartmp type=file mode=0555
@ -268,7 +265,6 @@
./etc/rc.d/rwho type=file mode=0555
./etc/rc.d/savecore type=file mode=0555
./etc/rc.d/screenblank type=file mode=0555
./etc/rc.d/sdpd type=file mode=0555
./etc/rc.d/securelevel type=file mode=0555
./etc/rc.d/sshd type=file mode=0555
./etc/rc.d/staticroute type=file mode=0555

View File

@ -1,6 +1,6 @@
#!/bin/sh -
#
# $NetBSD: sleep_button,v 1.7 2010/12/31 09:36:15 jruoho Exp $
# $NetBSD: sleep_button,v 1.8 2011/05/27 09:28:42 plunky Exp $
#
# Generic script for sleep button events.
#
@ -11,8 +11,7 @@
case "${2}" in
pressed)
/etc/rc.d/btdevctl stop
/etc/rc.d/btconfig stop
/etc/rc.d/bluetooth stop
/etc/rc.d/ntpd stop
/etc/rc.d/dhclient stop
/etc/rc.d/network stop
@ -36,8 +35,7 @@ pressed)
/etc/rc.d/dhclient start
/etc/rc.d/ntpdate start
/etc/rc.d/ntpd start
/etc/rc.d/btconfig start
/etc/rc.d/btdevctl start
/etc/rc.d/bluetooth start
;;
released)

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.83 2011/02/18 00:42:20 jmcneill Exp $
# $NetBSD: Makefile,v 1.84 2011/05/27 09:28:42 plunky Exp $
.include <bsd.own.mk>
@ -16,7 +16,7 @@
CONFIGFILES=\
DAEMON DISKS LOGIN NETWORKING SERVERS \
accounting altqd amd apmd \
bootconf.sh bootparams btattach btconfig btdevctl bthcid \
bluetooth bootconf.sh bootparams \
ccd cgd cleartmp cron \
dhclient dhcpcd dhcpd dhcrelay dmesg downinterfaces envsys \
fsck fsck_root ftp_proxy ftpd \
@ -33,7 +33,7 @@ CONFIGFILES=\
quota \
racoon rpcbind raidframe raidframeparity rarpd rbootd rndctl \
root route6d routed rtadvd rtclocaltime rtsold rwho \
savecore screenblank sdpd securelevel sshd \
savecore screenblank securelevel sshd \
staticroute swap1 swap2 sysctl sysdb syslogd \
timed tpctl ttys \
veriexec virecover wdogctl wpa_supplicant wscons wsmoused \

134
etc/rc.d/bluetooth Executable file
View File

@ -0,0 +1,134 @@
#!/bin/sh
#
# $NetBSD: bluetooth,v 1.1 2011/05/27 09:28:42 plunky Exp $
#
# PROVIDE: bluetooth
# REQUIRE: DAEMON
# BEFORE: LOGIN
$_rc_subr_loaded . /etc/rc.subr
name="bluetooth"
rcvar=${name}
start_cmd="bluetooth_start"
stop_cmd="bluetooth_stop"
btattach_cmd="/usr/sbin/btattach"
btconfig_cmd="/usr/sbin/btconfig"
bthcid_cmd="/usr/sbin/bthcid"
btdevctl_cmd="/usr/sbin/btdevctl"
sdpd_cmd="/usr/sbin/sdpd"
btattach_conf="/etc/bluetooth/btattach.conf"
btdevctl_conf="/etc/bluetooth/btdevctl.conf"
required_files="${btattach_conf} ${btdevctl_conf}"
bluetooth_start()
{
#
# attach Bluetooth serial controllers
#
while read type tty speed flags; do
case ${type} in
\#*|"")
continue
;;
esac
echo "attaching Bluetooth controller to $(basename ${tty})"
${btattach_cmd} ${flags} ${type} ${tty} ${speed}
done < ${btattach_conf}
#
# enable Bluetooth controllers.
#
# If ${btconfig_devices} is set, it is treated as a list of devices
# to configure. Otherwise, all available devices will be configured
#
# For each device we are configuring, enable it with maximum security
# settings (not discoverable, not connectable, auth and encryption
# required for all connections), relaxed link policy settings and
# the link master role, set a class of device for Computer, then apply
# any options from the 'btconfig_<dev>' or 'btconfig_args' variables
# on top of settings relaxing the security requirements, so that these
# can be overridden (btconfig parses all command line options before
# acting)
#
echo -n "configuring Bluetooth controllers:"
for dev in ${btconfig_devices:-$(${btconfig_cmd} -l)}; do
echo -n " ${dev}"
eval args=\${btconfig_${dev}:-\${btconfig_args}}
${btconfig_cmd} ${dev} enable -iscan -pscan auth encrypt
${btconfig_cmd} ${dev} switch hold sniff park master
${btconfig_cmd} ${dev} class 0x000100
${btconfig_cmd} ${dev} iscan pscan -auth -encrypt ${args}
done
echo "."
#
# start Bluetooth Link Key/PIN Code manager
#
if checkyesno bthcid; then
echo "starting Bluetooth Link Key/PIN Code manager"
${bthcid_cmd} ${bthcid_flags}
fi
#
# attach local Bluetooth service drivers
#
while read -r service addr dev junk; do
case ${service} in
\#*|"")
continue
;;
esac
if [ -z ${dev} -o ${junk} ]; then
echo "${name}: invalid entry"
return 1
fi
echo "attaching Bluetooth ${service} service from \"${addr}\""
${btdevctl_cmd} -A -a ${addr} -d ${dev} -s ${service}
done < ${btdevctl_conf}
#
# start Bluetooth Service Discovery server
#
if checkyesno sdpd; then
echo "starting Bluetooth Service Discovery server"
${sdpd_cmd} ${sdpd_flags}
fi
}
bluetooth_stop()
{
#
# disable Bluetooth controllers, detaching local service drivers
#
echo -n "disabling Bluetooth controllers:"
for dev in ${btconfig_devices:-$(${btconfig_cmd} -l)}; do
echo -n " ${dev}"
${btconfig_cmd} ${dev} disable
done
echo "."
#
# halt Service Discovery server, Link Key/PIN Code manager,
# and detach Bluetooth serial controllers
#
p1=$(check_pidfile /var/run/bthcid.pid ${bthcid_cmd})
p2=$(check_process ${sdpd_cmd})
p3=$(check_process ${btattach_cmd})
if [ -n "${p1}${p2}${p3}" ]; then
for pid in ${p1} ${p2} ${p3}; do
kill ${sig_stop} ${pid}
done
wait_for_pids ${p1} ${p2} ${p3}
fi
}
load_rc_config ${name}
run_rc_command "$1"

View File

@ -1,44 +0,0 @@
#!/bin/sh
#
# $NetBSD: btattach,v 1.1 2008/04/15 11:17:47 plunky Exp $
#
# PROVIDE: btattach
# REQUIRE: DAEMON
# BEFORE: bluetooth
$_rc_subr_loaded . /etc/rc.subr
name="btattach"
rcvar=${name}
required_files="/etc/bluetooth/btattach.conf"
start_cmd="btattach_start"
stop_cmd="btattach_stop"
btattach_start()
{
while read type tty speed flags; do
case ${type} in
\#*|"")
continue
;;
esac
/usr/sbin/btattach ${flags} ${type} ${tty} ${speed}
done < /etc/bluetooth/btattach.conf
}
btattach_stop()
{
pids="$(check_process btattach)"
if [ -n "${pids}" ]; then
for pid in ${pids}; do
kill $sig_stop $pid
done
fi
}
load_rc_config ${name}
run_rc_command "$1"

View File

@ -1,67 +0,0 @@
#!/bin/sh
#
# $NetBSD: btconfig,v 1.1 2006/06/19 15:44:36 gdamore Exp $
#
# PROVIDE: bluetooth
# REQUIRE: DAEMON
# BEFORE: LOGIN
$_rc_subr_loaded . /etc/rc.subr
name="btconfig"
rcvar=${name}
command="/usr/sbin/${name}"
start_cmd="btconfig_start"
stop_cmd="btconfig_stop"
status_cmd="btconfig_status"
btconfig_start()
{
echo -n 'Configuring Bluetooth controllers:'
#
# Configure Bluetooth controllers.
#
# If ${btconfig_devices} is set, it should be a list of devices to
# configure. Otherwise, all available devices will be configured.
#
# If ${btconfig_<dev>} is set, it will be used as the parameter
# list for btconfig. Otherwise ${btconfig_args} will be used or
# if that is not set, the default string "enable" will be used.
#
devs="${btconfig_devices:-$(${command} -l)}"
for dev in ${devs}; do
eval args="\$btconfig_${dev}"
if [ -z "${args}" ]; then
args="${btconfig_args:-enable}"
fi
echo -n " ${dev}"
${command} ${dev} ${args}
done
echo '.'
}
btconfig_stop()
{
echo -n 'Disabling Bluetooth controllers:'
devs="${btconfig_devices:-$(${command} -l)}"
for dev in ${devs}; do
echo -n " ${dev}"
${command} ${dev} disable
done
echo '.'
}
btconfig_status()
{
${command}
}
load_rc_config ${name}
run_rc_command "$1"

View File

@ -1,39 +0,0 @@
#!/bin/sh
#
# $NetBSD: btdevctl,v 1.4 2007/07/23 18:06:56 plunky Exp $
#
# PROVIDE: btdevctl
# REQUIRE: bluetooth bthcid
# BEFORE: LOGIN
$_rc_subr_loaded . /etc/rc.subr
name="btdevctl"
rcvar=${name}
required_files="/etc/bluetooth/btdevctl.conf"
start_cmd='do_btdevctl "-A" "Attaching"'
stop_cmd='do_btdevctl "-D" "Detaching"'
do_btdevctl()
{
echo "${2} Bluetooth devices:"
while read -r service address device junk; do
case ${service} in
\#*|"")
continue
;;
esac
if [ -z ${device} -o ${junk} ]; then
echo "${name}: invalid entry"
return 1
fi
/usr/sbin/btdevctl ${1} "-a" ${address} "-d" ${device} "-s" ${service}
done < /etc/bluetooth/btdevctl.conf
}
load_rc_config ${name}
run_rc_command "$1"

View File

@ -1,19 +0,0 @@
#!/bin/sh
#
# $NetBSD: bthcid,v 1.2 2010/06/01 21:08:13 wiz Exp $
#
# PROVIDE: bthcid
# REQUIRE: bluetooth
# BEFORE: LOGIN
$_rc_subr_loaded . /etc/rc.subr
name="bthcid"
rcvar=$name
command="/usr/sbin/${name}"
pidfile="/var/run/${name}.pid"
load_rc_config $name
run_rc_command "$1"

View File

@ -1,17 +0,0 @@
#!/bin/sh
#
# $NetBSD: sdpd,v 1.3 2010/06/01 21:08:13 wiz Exp $
#
# PROVIDE: sdpd
# REQUIRE: bluetooth
# BEFORE: LOGIN
$_rc_subr_loaded . /etc/rc.subr
name="sdpd"
rcvar=$name
command="/usr/sbin/${name}"
load_rc_config $name
run_rc_command "$1"

View File

@ -1,4 +1,4 @@
.\" $NetBSD: rc.conf.5,v 1.146 2011/03/18 16:21:46 jruoho Exp $
.\" $NetBSD: rc.conf.5,v 1.147 2011/05/27 09:28:42 plunky Exp $
.\"
.\" Copyright (c) 1996 Matthew R. Green
.\" All rights reserved.
@ -1322,50 +1322,50 @@ are true.
Passes
.Sy statd_flags .
.El
.Ss Bluetooth configuration and daemons
.Ss Bluetooth support
.Bl -tag -width net_interfaces
.It Sy btattach
.It Sy bluetooth
Boolean value.
Attach serial bluetooth interfaces as listed in the configuration file
.Pa /etc/bluetooth/btdevctl.conf .
.It Sy btconfig
Boolean value.
Configure bluetooth devices.
If the
.Sy btconfig_devices
variable below is not specified, all devices known to the system
will be configured.
For each device, configuration arguments are first looked for
in the
.Sy btconfig_{dev}
variable, otherwise the value of the
.Sy btconfig_args
variable will be used, and if that is not specified the default string is
.Sq enable .
Configure Bluetooth support, comprising the following tasks:
.Bl -dash -compact
.It
attach serial Bluetooth controllers as listed in the
.Pa /etc/bluetooth/btdevctl.conf
configuration file.
.It
enable Bluetooth controllers with useful defaults, plus
additional options as detailed below.
.It
optionally, start
.Xr bthcid 8 ,
the Bluetooth Link Key/PIN Code manager, passing
.Sy bthcid_flags .
.It
configure local Bluetooth drivers as listed in the
.Pa /etc/bluetooth/btdevctl.conf
configuration file.
.It
optionally, start
.Xr sdpd 8 ,
the Service Discovery server, passing
.Sy sdpd_flags .
.El
.It Sy btconfig_devices
An optional space separated list of bluetooth devices to be configured at
boot time.
A string.
An optional list of Bluetooth controllers to configure.
.It Sy btconfig_{dev}
A string.
Additional configuration options for specific Bluetooth controllers.
.It Sy btconfig_args
An optional string, containing default arguments for bluetooth devices to
be configured.
.It Sy btdevctl
Boolean value.
Configure Bluetooth devices as listed in the configuration file
.Pa /etc/bluetooth/btdevctl.conf .
A string.
Additional configuration options for Bluetooth controllers without
specific options as above.
.It Sy bthcid
Boolean value.
Runs
.Xr bthcid 8 ,
the Bluetooth HCI daemon, which manages link keys and PIN codes for
Bluetooth links.
Passes
.Sy bthcid_flags .
If set to false, disable starting the Bluetooth Link Key/PIN Code manager.
.It Sy sdpd
Boolean value.
Runs the Service Discovery Profile daemon,
.Xr sdpd 8 .
Passes
.Sy sdpd_flags .
If set to false, disable starting the Bluetooth Service Discovery server.
.El
.Ss Other daemons
.Bl -tag -width net_interfaces

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# $NetBSD: postinstall,v 1.117 2011/04/17 13:16:59 martin Exp $
# $NetBSD: postinstall,v 1.118 2011/05/27 09:28:42 plunky Exp $
#
# Copyright (c) 2002-2008 The NetBSD Foundation, Inc.
# All rights reserved.
@ -651,9 +651,10 @@ detect_x11()
#
#
# bluetooth
# Bluetooth
#
additem bluetooth "bluetooth configuration is up to date"
additem bluetooth "Bluetooth configuration is up to date"
do_bluetooth()
{
[ -n "$1" ] || err 3 "USAGE: do_bluetooth fix|check"
@ -669,6 +670,18 @@ do_bluetooth()
"${DEST_DIR}/var/db/btdevctl.plist"
failed=$(( ${failed} + $? ))
notfixed=""
if [ "${op}" = "fix" ]; then
notfixed="${NOT_FIXED}"
fi
for _v in btattach btconfig btdevctl; do
if rcconf_is_set "${op}" "${_v}" "${_v}"; then
msg \
"${_v} is obsolete in rc.conf(5)${notfixed}: use bluetooth=YES"
failed=$(( ${failed} + 1 ))
fi
done
return ${failed}
}
@ -1070,7 +1083,7 @@ do_rc()
compare_dir "${op}" "${SRC_DIR}/etc/rc.d" "${DEST_DIR}/etc/rc.d" 555 \
DAEMON DISKS LOGIN NETWORKING SERVERS \
accounting altqd amd apmd \
bootconf.sh bootparams btattach btconfig btdevctl bthcid \
bluetooth bootconf.sh bootparams \
ccd cgd cleartmp cron \
dhclient dhcpcd dhcpd dhcrelay dmesg downinterfaces envsys \
fsck fsck_root ftp_proxy ftpd \
@ -1088,7 +1101,7 @@ do_rc()
quota \
racoon rpcbind raidframe raidframeparity rarpd rbootd rndctl \
root route6d routed rtadvd rtclocaltime rtsold rwho \
savecore screenblank sdpd securelevel sshd \
savecore screenblank securelevel sshd \
staticroute swap1 swap2 sysctl sysdb syslogd \
timed tpctl ttys \
veriexec virecover wdogctl wpa_supplicant wscons wsmoused \
@ -1111,7 +1124,8 @@ do_rc()
fi
# check for obsolete rc.d files
for f in NETWORK btcontrol btuartd fsck.sh kerberos nfsiod servers \
for f in NETWORK btattach btconfig btcontrol btdevctl bthcid btuartd \
fsck.sh kerberos nfsiod sdpd servers \
systemfs daemon gated login poffd portmap sunndd xntpd; do
fd="/etc/rc.d/${f}"
[ -e "${DEST_DIR}${fd}" ] && echo "${fd}"