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 | ||
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" | |
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 | uwb_rc=$(readlink -f $dev/uwb_rc) |
84 | if cat $uwb_rc/beacon | grep -q -- "-1" | |
99d368bc | 85 | then |
f1fa035f FZ |
86 | echo 13 0 > $uwb_rc/beacon |
87 | echo I: started beaconing on ch 13 on $(basename $uwb_rc) >&2 | |
99d368bc | 88 | fi |
f1fa035f FZ |
89 | echo $host_CHID > $dev/wusb_chid |
90 | echo I: started host $(basename $dev) >&2 | |
91 | done | |
92 | ;; | |
93 | stop) | |
94 | for dev in ${2:-$hdevs} | |
95 | do | |
96 | echo 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > $dev/wusb_chid | |
97 | echo I: stopped host $(basename $dev) >&2 | |
98 | uwb_rc=$(readlink -f $dev/uwb_rc) | |
99 | echo -1 | cat > $uwb_rc/beacon | |
100 | echo I: stopped beaconing on $(basename $uwb_rc) >&2 | |
99d368bc IPG |
101 | done |
102 | ;; | |
103 | set-chid) | |
104 | shift | |
f1fa035f FZ |
105 | for dev in ${2:-$devs}; do |
106 | echo "${4:-$host_name}" > $dev/wusb_host_name | |
107 | echo "${3:-$host_band_group}" > $dev/wusb_host_band_groups | |
108 | echo ${2:-$host_CHID} > $dev/wusb_chid | |
99d368bc IPG |
109 | done |
110 | ;; | |
111 | get-cdid) | |
112 | for dev in ${2:-$devs} | |
113 | do | |
114 | cat $dev/wusb_cdid | |
115 | done | |
116 | ;; | |
117 | set-cc) | |
f1fa035f FZ |
118 | for dev in ${2:-$devs}; do |
119 | shift | |
120 | CDID="$(head --bytes=16 /dev/urandom | od -tx1 -An)" | |
121 | CK="$(head --bytes=16 /dev/urandom | od -tx1 -An)" | |
122 | echo "$CDID" > $dev/wusb_cdid | |
123 | echo "$CK" > $dev/wusb_ck | |
124 | ||
125 | echo I: CC set >&2 | |
126 | echo "CHID: $(cat $dev/wusb_chid)" | |
127 | echo "CDID:$CDID" | |
128 | echo "CK: $CK" | |
99d368bc IPG |
129 | done |
130 | ;; | |
131 | help|h|--help|-h) | |
132 | help | |
133 | ;; | |
134 | *) | |
135 | echo "E: Unknown usage" 1>&2 | |
136 | help 1>&2 | |
137 | result=1 | |
138 | esac | |
139 | exit $result |