# # README for usbip-utils WebSocket extension sample. # # Copyright (C) 2015-2016 Nobuo Iwata # 1) Goal of this sample To give a sample application for USB/IP API. 2) Build libwebsockets Install openssl-devel or openssl-dev package. > sodo yum install openssl-devel Get source code from https://libwebsockets.org/. > cd <libwebsockets-src> > mkdir build > cd build > cmake .. > make > sudo make install 3) Build USB/IP library > cd <kernel-src>/tools/usb/usbip > ./autogen.sh > ./configure > make > sudo make install libusbip.so, libusbipc.so, libusbipa.so and libusbipd.so are created in /usr/local/lib. To build with libusb - device side only, > cd <kernel-src>/tools/usb/usbip/libusb > ./autogen.sh > ./configure [--with-dummy-driver] > make > sudo make install libusbip_libusb.so, libusbip_stub.so, libusbipc_libusb.so and libusbipd_libusb.so are created in /usr/local/lib. 4) Build USB over WebSocket utilities > ./autogen.sh > ./configure [--with-libusb] > make > sudo make install 5) Usage of USB over WebSocket utilities usbwsa [options] - daemon for application side usbwsd [options] - daemon for device side -d, --debug Enable debug messages. -t, --tcp=PORT-NUMBER Serving TCP port number. Default is 80 or 443 for non-SSL and SSL respectively. -p, --path=PATH Serving path portion of URL. Default is /usbip. -i, --interval=INTERVAL Noncommunication time period to send ping-pong in seconds. Default is 60. 0 denotes not to use ping-pong. -s, -ssl SSL mode, ie. wss. -k, --key=KEY-FILE Private key file. Default is cert/server.key. -c, --cert=CERT-FILE Certificate file. Default is cert/server.crt. -r, --root-cert=ROOT-CERT-FILE Certificate file of root CA. Not used as default. -V, --verification=VERIFICATION-MODE none(default), relaxed, strict or once. -h, --help Print help. -v, --version Show version. usbws <command> [options] - command for both device and application side command connect - export a device to remote. (at device side) disconnect - unexport a device from remote. (at device side) list - list local devices. (at device side) list importable devices. (at application side) port - list imported devices. (at application side) bind - make a device importable. (at device side) attach - import a device. (at application side) detach - cancel import. (at application side) unbind - make a device not importable. (at device side) -d, --debug Enable debug messages. -u, --url=URL URL of WebSocket server. ex) ws://<host>/usbip or wss://<host>/usbip Default port number is 80 or 443 for ws and wsss respectively. -p, --proxy=URL URL of http proxy server. ex) http://<proxy-addr>:8080 No proxy is used as default. Proxy user and password can be specified in URL. ex) http://<user>:<pwd>@<proxy-host>:8080 -b, --busid=BUS-ID Bus ID of a device to export or unexport. -o, --timeout Connect timeout in seconds. Default is 5. -i, --interval=INTERVAL Noncommunication time period to send ping-pong in seconds. Default is 60. 0 denotes not to use ping-pong. -k, --key=KEY-FILE Private key file. Default is cert/server.key. -c, --cert=CERT-FILE Certificate file. Default is cert/server.crt. -r, --root-cert=ROOT-CERT-FILE Certificate file of root CA. Not used as default. -V, --verification=VERIFICATION-MODE none(default), relaxed. 6) Example Insert drivers. a) Application side computer # cd usbip # insmod usbip-core.ko # insmod usbip-ux.ko # insmod vhci-hcd.ko b) Device side computer # cd usbip # insmod usbip-core.ko # insmod usbip-ux.ko # insmod usbip-host.ko Execute utilities. a) Application side computer # cd usbip/userspace # websocket/src/usbwsa --tcp-port 3240 --ssl b) Device side computer --- START --- # cd usbip/userspace # websocket/src/usbws connect \ --url wss://111.222.333.444:3240/usbip -b 1-2 NOTE: it will running while normal operation. --- END ... in another window --- # cd usbip/userspace # websocket/src/usbws disconnect \ --url wss://111.222.333.444:3240/usbip -b 1-2 Usage via HTTP proxy Example below shows usage pass through squid proxy. a) Summary of /etc/squid/squid.conf acl SSL_ports port 443 acl CONNECT method CONNECT http_access deny CONNECT !SSL_ports http_port 3128 b) Application side # cd usbip/userspace # websocket/src/usbwsa --ssl c) Device side --- START --- # cd usbip/userspace # websocket/src/usbws connect -proxy http://proxy.example.com:3128 \ --url wss://111.222.333.444/usbip -b 1-2 NOTE: it will running while normal operation. --- END ... in another window --- # cd usbip/userspace # websocket/src/usbws disconnect -proxy http://proxy.example.com:3128 \ --url wss://111.222.333.444/usbip -b 1-2