| Inaky Perez-Gonzalez | 99d368b | 2008-09-17 16:34:04 +0100 | [diff] [blame] | 1 | #! /bin/bash | 
 | 2 | # | 
 | 3 |  | 
 | 4 | set -e | 
 | 5 |  | 
 | 6 | progname=$(basename $0) | 
 | 7 | function help | 
 | 8 | { | 
 | 9 |     cat <<EOF | 
 | 10 | Usage: $progname COMMAND DEVICEs [ARGS] | 
 | 11 |  | 
 | 12 | Command for manipulating the pairing/authentication credentials of a | 
 | 13 | Wireless USB device that supports wired-mode Cable-Based-Association. | 
 | 14 |  | 
 | 15 | Works in conjunction with the wusb-cba.ko driver from http://linuxuwb.org. | 
 | 16 |  | 
 | 17 |  | 
 | 18 | DEVICE | 
 | 19 |  | 
 | 20 |  sysfs path to the device to authenticate; for example, both this | 
 | 21 |  guys are the same: | 
 | 22 |  | 
 | 23 |  /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4.4/1-4.4:1.1 | 
 | 24 |  /sys/bus/usb/drivers/wusb-cbaf/1-4.4:1.1 | 
 | 25 |  | 
 | 26 | COMMAND/ARGS are | 
 | 27 |  | 
 | 28 |  start | 
 | 29 |  | 
 | 30 |    Start a WUSB host controller (by setting up a CHID) | 
 | 31 |  | 
 | 32 |  set-chid DEVICE HOST-CHID HOST-BANDGROUP HOST-NAME | 
 | 33 |  | 
 | 34 |    Sets host information in the device; after this you can call the | 
 | 35 |    get-cdid to see how does this device report itself to us. | 
 | 36 |  | 
 | 37 |  get-cdid DEVICE | 
 | 38 |  | 
 | 39 |    Get the device ID associated to the HOST-CHDI we sent with | 
 | 40 |    'set-chid'. We might not know about it. | 
 | 41 |  | 
 | 42 |  set-cc DEVICE | 
 | 43 |  | 
 | 44 |    If we allow the device to connect, set a random new CDID and CK | 
 | 45 |    (connection key). Device saves them for the next time it wants to | 
 | 46 |    connect wireless. We save them for that next time also so we can | 
 | 47 |    authenticate the device (when we see the CDID he uses to id | 
 | 48 |    itself) and the CK to crypto talk to it. | 
 | 49 |  | 
 | 50 | CHID is always 16 hex bytes in 'XX YY ZZ...' form | 
 | 51 | BANDGROUP is almost always 0001 | 
 | 52 |  | 
 | 53 | Examples: | 
 | 54 |  | 
 | 55 |   You can default most arguments to '' to get a sane value: | 
 | 56 |  | 
 | 57 |   $ $progname set-chid '' '' '' "My host name" | 
 | 58 |  | 
 | 59 |   A full sequence: | 
 | 60 |  | 
 | 61 |   $ $progname set-chid '' '' '' "My host name" | 
 | 62 |   $ $progname get-cdid '' | 
 | 63 |   $ $progname set-cc '' | 
 | 64 |  | 
 | 65 | EOF | 
 | 66 | } | 
 | 67 |  | 
 | 68 |  | 
 | 69 | # Defaults | 
 | 70 | # FIXME: CHID should come from a database :), band group from the host | 
 | 71 | host_CHID="00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff" | 
 | 72 | host_band_group="0001" | 
| Felipe Zimmerle | f1fa035 | 2008-09-17 16:34:42 +0100 | [diff] [blame] | 73 | host_name=$(hostname) | 
| Inaky Perez-Gonzalez | 99d368b | 2008-09-17 16:34:04 +0100 | [diff] [blame] | 74 |  | 
 | 75 | devs="$(echo /sys/bus/usb/drivers/wusb-cbaf/[0-9]*)" | 
| Felipe Zimmerle | f1fa035 | 2008-09-17 16:34:42 +0100 | [diff] [blame] | 76 | hdevs="$(for h in /sys/class/uwb_rc/*/wusbhc; do readlink -f $h; done)" | 
| Inaky Perez-Gonzalez | 99d368b | 2008-09-17 16:34:04 +0100 | [diff] [blame] | 77 |  | 
 | 78 | result=0 | 
 | 79 | case $1 in | 
 | 80 |     start) | 
 | 81 |         for dev in ${2:-$hdevs} | 
 | 82 |           do | 
| Felipe Zimmerle | f1fa035 | 2008-09-17 16:34:42 +0100 | [diff] [blame] | 83 |           echo $host_CHID > $dev/wusb_chid | 
 | 84 |           echo I: started host $(basename $dev) >&2 | 
 | 85 |         done | 
 | 86 |         ;; | 
 | 87 |     stop) | 
 | 88 |         for dev in ${2:-$hdevs} | 
 | 89 |           do | 
 | 90 |           echo 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > $dev/wusb_chid | 
 | 91 |           echo I: stopped host $(basename $dev) >&2 | 
| Inaky Perez-Gonzalez | 99d368b | 2008-09-17 16:34:04 +0100 | [diff] [blame] | 92 |         done | 
 | 93 |         ;; | 
 | 94 |     set-chid) | 
 | 95 |         shift | 
| Felipe Zimmerle | f1fa035 | 2008-09-17 16:34:42 +0100 | [diff] [blame] | 96 |         for dev in ${2:-$devs}; do | 
 | 97 |             echo "${4:-$host_name}" > $dev/wusb_host_name | 
 | 98 |             echo "${3:-$host_band_group}" > $dev/wusb_host_band_groups | 
 | 99 |             echo ${2:-$host_CHID} > $dev/wusb_chid | 
| Inaky Perez-Gonzalez | 99d368b | 2008-09-17 16:34:04 +0100 | [diff] [blame] | 100 |         done | 
 | 101 |         ;; | 
 | 102 |     get-cdid) | 
 | 103 |         for dev in ${2:-$devs} | 
 | 104 |           do | 
 | 105 |           cat $dev/wusb_cdid | 
 | 106 |         done | 
 | 107 |         ;; | 
 | 108 |     set-cc) | 
| Felipe Zimmerle | f1fa035 | 2008-09-17 16:34:42 +0100 | [diff] [blame] | 109 |         for dev in ${2:-$devs}; do | 
 | 110 |             shift | 
 | 111 |             CDID="$(head --bytes=16 /dev/urandom  | od -tx1 -An)" | 
 | 112 |             CK="$(head --bytes=16 /dev/urandom  | od -tx1 -An)" | 
 | 113 |             echo "$CDID" > $dev/wusb_cdid | 
 | 114 |             echo "$CK" > $dev/wusb_ck | 
 | 115 |  | 
 | 116 |             echo I: CC set >&2 | 
 | 117 |             echo "CHID: $(cat $dev/wusb_chid)" | 
 | 118 |             echo "CDID:$CDID" | 
 | 119 |             echo "CK:  $CK" | 
| Inaky Perez-Gonzalez | 99d368b | 2008-09-17 16:34:04 +0100 | [diff] [blame] | 120 |         done | 
 | 121 |         ;; | 
 | 122 |     help|h|--help|-h) | 
 | 123 |         help | 
 | 124 |         ;; | 
 | 125 |     *) | 
 | 126 |         echo "E: Unknown usage" 1>&2 | 
 | 127 |         help 1>&2 | 
 | 128 |         result=1 | 
 | 129 | esac | 
 | 130 | exit $result |