]>
Commit | Line | Data |
---|---|---|
99d368bc IPG |
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 | ||
5edfe7d8 | 39 | Get the device ID associated to the HOST-CHID we sent with |
99d368bc IPG |
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" | |
f1fa035f | 73 | host_name=$(hostname) |
99d368bc IPG |
74 | |
75 | devs="$(echo /sys/bus/usb/drivers/wusb-cbaf/[0-9]*)" | |
f1fa035f | 76 | hdevs="$(for h in /sys/class/uwb_rc/*/wusbhc; do readlink -f $h; done)" |
99d368bc IPG |
77 | |
78 | result=0 | |
79 | case $1 in | |
80 | start) | |
81 | for dev in ${2:-$hdevs} | |
82 | do | |
f1fa035f FZ |
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 | |
99d368bc IPG |
92 | done |
93 | ;; | |
94 | set-chid) | |
95 | shift | |
f1fa035f FZ |
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 | |
99d368bc IPG |
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) | |
f1fa035f FZ |
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" | |
99d368bc IPG |
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 |