[BACK]Return to bluetooth CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / etc / rc.d

File: [cvs.NetBSD.org] / src / etc / rc.d / bluetooth (download)

Revision 1.1, Fri May 27 09:28:42 2011 UTC (12 years, 10 months ago) by plunky
Branch: MAIN
CVS Tags: yamt-pagecache-tag8, yamt-pagecache-base9, yamt-pagecache-base8, yamt-pagecache-base7, yamt-pagecache-base6, yamt-pagecache-base5, yamt-pagecache-base4, yamt-pagecache-base3, yamt-pagecache-base2, yamt-pagecache-base, yamt-pagecache, tls-maxphys-base, tls-maxphys, tls-earlyentropy-base, tls-earlyentropy, riastradh-xf86-video-intel-2-7-1-pre-2-21-15, riastradh-drm2-base3, riastradh-drm2-base2, riastradh-drm2-base1, riastradh-drm2-base, riastradh-drm2, prg-localcount2-base3, prg-localcount2-base2, prg-localcount2-base1, prg-localcount2-base, prg-localcount2, phil-wifi-base, phil-wifi-20200421, phil-wifi-20200411, phil-wifi-20200406, phil-wifi-20191119, phil-wifi-20190609, phil-wifi, pgoyette-localcount-base, pgoyette-localcount-20170426, pgoyette-localcount-20170320, pgoyette-localcount-20170107, pgoyette-localcount-20161104, pgoyette-localcount-20160806, pgoyette-localcount-20160726, pgoyette-localcount, pgoyette-compat-merge-20190127, pgoyette-compat-base, pgoyette-compat-20190127, pgoyette-compat-20190118, pgoyette-compat-1226, pgoyette-compat-1126, pgoyette-compat-1020, pgoyette-compat-0930, pgoyette-compat-0906, pgoyette-compat-0728, pgoyette-compat-0625, pgoyette-compat-0521, pgoyette-compat-0502, pgoyette-compat-0422, pgoyette-compat-0415, pgoyette-compat-0407, pgoyette-compat-0330, pgoyette-compat-0322, pgoyette-compat-0315, pgoyette-compat, perseant-stdc-iso10646-base, perseant-stdc-iso10646, netbsd-9-base, netbsd-9-3-RELEASE, netbsd-9-2-RELEASE, netbsd-9-1-RELEASE, netbsd-9-0-RELEASE, netbsd-9-0-RC2, netbsd-9-0-RC1, netbsd-9, netbsd-8-base, netbsd-8-2-RELEASE, netbsd-8-1-RELEASE, netbsd-8-1-RC1, netbsd-8-0-RELEASE, netbsd-8-0-RC2, netbsd-8-0-RC1, netbsd-8, netbsd-7-nhusb-base-20170116, netbsd-7-nhusb-base, netbsd-7-nhusb, netbsd-7-base, netbsd-7-2-RELEASE, netbsd-7-1-RELEASE, netbsd-7-1-RC2, netbsd-7-1-RC1, netbsd-7-1-2-RELEASE, netbsd-7-1-1-RELEASE, netbsd-7-1, netbsd-7-0-RELEASE, netbsd-7-0-RC3, netbsd-7-0-RC2, netbsd-7-0-RC1, netbsd-7-0-2-RELEASE, netbsd-7-0-1-RELEASE, netbsd-7-0, netbsd-7, netbsd-6-base, netbsd-6-1-RELEASE, netbsd-6-1-RC4, netbsd-6-1-RC3, netbsd-6-1-RC2, netbsd-6-1-RC1, netbsd-6-1-5-RELEASE, netbsd-6-1-4-RELEASE, netbsd-6-1-3-RELEASE, netbsd-6-1-2-RELEASE, netbsd-6-1-1-RELEASE, netbsd-6-1, netbsd-6-0-RELEASE, netbsd-6-0-RC2, netbsd-6-0-RC1, netbsd-6-0-6-RELEASE, netbsd-6-0-5-RELEASE, netbsd-6-0-4-RELEASE, netbsd-6-0-3-RELEASE, netbsd-6-0-2-RELEASE, netbsd-6-0-1-RELEASE, netbsd-6-0, netbsd-6, matt-nb8-mediatek-base, matt-nb8-mediatek, matt-nb6-plus-nbase, matt-nb6-plus-base, matt-nb6-plus, localcount-20160914, khorben-n900, is-mlppp-base, is-mlppp, cjep_sun2x-base1, cjep_sun2x-base, cjep_sun2x, cjep_staticlib_x-base1, cjep_staticlib_x-base, cjep_staticlib_x, cherry-xenmp-base, cherry-xenmp, bouyer-socketcan-base1, bouyer-socketcan-base, bouyer-socketcan, agc-symver-base, agc-symver

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.

#!/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"