123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #! /bin/bash
- #
- set -e
- progname=$(basename $0)
- function help
- {
- cat <<EOF
- Usage: $progname COMMAND DEVICEs [ARGS]
- Command for manipulating the pairing/authentication credentials of a
- Wireless USB device that supports wired-mode Cable-Based-Association.
- Works in conjunction with the wusb-cba.ko driver from http://linuxuwb.org.
- DEVICE
- sysfs path to the device to authenticate; for example, both this
- guys are the same:
- /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.4/1-4.4:1.1
- /sys/bus/usb/drivers/wusb-cbaf/1-4.4:1.1
- COMMAND/ARGS are
- start
- Start a WUSB host controller (by setting up a CHID)
- set-chid DEVICE HOST-CHID HOST-BANDGROUP HOST-NAME
- Sets host information in the device; after this you can call the
- get-cdid to see how does this device report itself to us.
- get-cdid DEVICE
- Get the device ID associated to the HOST-CHDI we sent with
- 'set-chid'. We might not know about it.
- set-cc DEVICE
- If we allow the device to connect, set a random new CDID and CK
- (connection key). Device saves them for the next time it wants to
- connect wireless. We save them for that next time also so we can
- authenticate the device (when we see the CDID he uses to id
- itself) and the CK to crypto talk to it.
- CHID is always 16 hex bytes in 'XX YY ZZ...' form
- BANDGROUP is almost always 0001
- Examples:
- You can default most arguments to '' to get a sane value:
- $ $progname set-chid '' '' '' "My host name"
- A full sequence:
- $ $progname set-chid '' '' '' "My host name"
- $ $progname get-cdid ''
- $ $progname set-cc ''
- EOF
- }
- # Defaults
- # FIXME: CHID should come from a database :), band group from the host
- host_CHID="00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff"
- host_band_group="0001"
- host_name="Linux-WUSB"
- devs="$(echo /sys/bus/usb/drivers/wusb-cbaf/[0-9]*)"
- hdevs="$(find /sys -name wusb_chid -printf "%h\n")"
- result=0
- case $1 in
- start)
- for dev in ${2:-$hdevs}
- do
- uwb_rc=$(find $(dirname $(dirname $dev)) -iname uwb_rc:uwb*)
- if cat $uwb_rc/uwb_rc/beacon | grep -q "channel: -1"
- then
- echo 13 0 | cat > $uwb_rc/uwb_rc/beacon
- echo I: started beaconing on ch 13 in host $(basename $uwb_rc)
- fi
- echo $host_CHID | cat > $dev/wusb_chid
- echo I: started host $(basename $dev)
- done
- ;;
- set-chid)
- shift
- for dev in ${2:-$devs}
- do
- echo "${2:-$host_CHID}" "${3:-$host_band_group}" "${4:-$host_name}" \
- | cat > $dev/wusb_host_info
- done
- ;;
- get-cdid)
- for dev in ${2:-$devs}
- do
- cat $dev/wusb_cdid
- done
- ;;
- set-cc)
- for dev in ${2:-$devs}
- do
- shift
- CDID="$(head --bytes=16 /dev/urandom | od -tx1 -An)"
- CK="$(head --bytes=16 /dev/urandom | od -tx1 -An)"
- cat > $dev/wusb_cc <<EOF
- CDID:$CDID
- CK:$CK
- EOF
- cat <<EOF
- I: CC set
- CHID: $host_CHID
- CDID:$CDID
- CK: $CK
- EOF
- done
- ;;
- help|h|--help|-h)
- help
- ;;
- *)
- echo "E: Unknown usage" 1>&2
- help 1>&2
- result=1
- esac
- exit $result
|