Signed-off-by: Masanari Iida <standby24x7@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
		
			
				
	
	
		
			130 lines
		
	
	
	
		
			3.2 KiB
			
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
	
		
			3.2 KiB
			
		
	
	
	
		
			Bash
		
	
	
	
	
	
#! /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-CHID 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=$(hostname)
 | 
						|
 | 
						|
devs="$(echo /sys/bus/usb/drivers/wusb-cbaf/[0-9]*)"
 | 
						|
hdevs="$(for h in /sys/class/uwb_rc/*/wusbhc; do readlink -f $h; done)"
 | 
						|
 | 
						|
result=0
 | 
						|
case $1 in
 | 
						|
    start)
 | 
						|
        for dev in ${2:-$hdevs}
 | 
						|
          do
 | 
						|
          echo $host_CHID > $dev/wusb_chid
 | 
						|
          echo I: started host $(basename $dev) >&2
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    stop)
 | 
						|
        for dev in ${2:-$hdevs}
 | 
						|
          do
 | 
						|
          echo 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > $dev/wusb_chid
 | 
						|
          echo I: stopped host $(basename $dev) >&2
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    set-chid)
 | 
						|
        shift
 | 
						|
        for dev in ${2:-$devs}; do
 | 
						|
            echo "${4:-$host_name}" > $dev/wusb_host_name
 | 
						|
            echo "${3:-$host_band_group}" > $dev/wusb_host_band_groups
 | 
						|
            echo ${2:-$host_CHID} > $dev/wusb_chid
 | 
						|
        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)"
 | 
						|
            echo "$CDID" > $dev/wusb_cdid
 | 
						|
            echo "$CK" > $dev/wusb_ck
 | 
						|
 | 
						|
            echo I: CC set >&2
 | 
						|
            echo "CHID: $(cat $dev/wusb_chid)"
 | 
						|
            echo "CDID:$CDID"
 | 
						|
            echo "CK:  $CK"
 | 
						|
        done
 | 
						|
        ;;
 | 
						|
    help|h|--help|-h)
 | 
						|
        help
 | 
						|
        ;;
 | 
						|
    *)
 | 
						|
        echo "E: Unknown usage" 1>&2
 | 
						|
        help 1>&2
 | 
						|
        result=1
 | 
						|
esac
 | 
						|
exit $result
 |