[PATCH v3 00/11] usbip: features to USB over WebSocket

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear all,

This series of patches introduces WebSocket to USB/IP. 

0. Version info

v3)
# Coding style for goto err labels are fixed.
# Defined magic numbers for open_hc_device() argument.
# Corrected include .../uapi/linux/usbip_ux.h as <linux/usbip_ux.h>.
# Modified parameter notation in manuals not to use '='.
# Fixed inappropriate version definition in 
tools/.../websocket/configure.ac.
# Removed unnecessary COPYING and AUTHORS file from 
tools/.../websocket/.
# Added -version-info to libraries in tools/.../src.

v2)
# Formatted patches from linux-next.
# Fixed change log word wrapping.
# Removed SSL patches.
# Fixed a bug that vendor and product names are not shown by 'usbws 
list -l' because usbip_names_init() was not called in libusbip.la.

1. Why WebSocket?

It allows to use USB/IP in internet. WebSocket is widely used to 
encapsulate packets in HTTP and to carry them through firewall using 
HTTP port numbers.

Assumed use case is a system that service in internet serves 
distributes devices in home or office networks. Service may be called 
as cloud and devices as ubiquitous.

   Home/SOHO/Intranet                Internet  
                         +--------+            +--------+
 +------+   +------+     |Router, |            |Internet|
+|device|---|Linux |-----|proxy,  |------------|service |
|+------+   +------+     |firewall|            |on Linux|
+------+   controller    +--------+            +--------+
ex)
Device                                      Service 
 sensors ................................... environment analysis 
 cameras ................................... monitoring, recording
 ID/biometric readers ...................... authentication

2. Why exporting devices?

Connection from outside firewall is usually blocked.
So existing import request sent with attach command doesn't work.

# usbipd                 (blocked)|| <--------- # usbip attach

Firewall opens some ports, usually HTTP(80) and HTTPS(443), from inside.
Then export request sent with new connect command works.

# usbip connect  -----------------------------> # usbipa
                         (passed)

3. Features included

It also includes some independent features effective in themselves.

1) Exporting devices

Export request and response PDU had been defined in a header but not 
been used.
Now it works!
   
Also, it supports senarios, for example, connect ubiquetous devices to 
a Linux based cloud service.
In this senario, it's needed to establish connection from a device 
inside of firewall to a service outside. Exporting is suit for the 
senario.

2) User space transmission

USB/IP transfer URBs in kernel space. It's better for performance but 
difficult to introduce application protocols.

Like fuse for file systems, it allows to transfer URBs in user space.

When usbip_ux.ko is loaded, it replaces kernel_sendmsg() and 
kernel_recvmsg() with user spcace interface. When USB/IP utilities find 
usbip_ux.ko, they start threads to read/write PDUs from/to usbip_ux.ko 
and send/recv them.

3) Replaceable protocols

Both transmission(send/receive) and connection establishment are 
replaceable.

4) a WebSocket implementation

It's made with Poco C++. DNS and proxy client are supported.


I published scripts I used while developed the patches.
http://linux-usbip-additions.blogspot.jp/2015/03/scripts-to-patch-and-ma
ke-locally.html
http://linux-usbip-additions.blogspot.jp/2015/03/test-scripts.html

Thank you,

Nobuo Iwata <nobuo.iwata@xxxxxxxxxxxxxxx>
//

*** BLURB HERE ***

Nobuo Iwata (11):
  usbip: exporting devices
  usbip: readme and manuals about exporting devices
  usbip: safe completion against usb_kill_urb()
  usbip: kernel module for userspace URBs transmission
  usbip: tools for userspace URBs transmission
  usbip: readme about user space URBs transmission
  usbip: letting send and receive replaceable
  usbip: letting connection establishment replaceable
  usbip: deriving functions as libraries
  usbip: added const qualifier to arguments of some functions
  usbip: USB over WebSocket

 drivers/usb/usbip/Kconfig                     |  10 +
 drivers/usb/usbip/Makefile                    |   3 +
 drivers/usb/usbip/stub_dev.c                  |  16 +-
 drivers/usb/usbip/stub_rx.c                   |   3 +-
 drivers/usb/usbip/stub_tx.c                   |   9 +-
 drivers/usb/usbip/usbip_common.c              |  79 ++-
 drivers/usb/usbip/usbip_common.h              |  29 +-
 drivers/usb/usbip/usbip_ux.c                  | 602 ++++++++++++++++++
 drivers/usb/usbip/usbip_ux.h                  |  82 +++
 drivers/usb/usbip/vhci_hcd.c                  |   9 +-
 drivers/usb/usbip/vhci_rx.c                   |   3 +-
 drivers/usb/usbip/vhci_sysfs.c                |  40 +-
 drivers/usb/usbip/vhci_tx.c                   |   6 +-
 include/uapi/linux/usbip_ux.h                 |  39 ++
 tools/usb/usbip/Makefile.am                   |   2 +-
 tools/usb/usbip/README                        |  92 ++-
 tools/usb/usbip/doc/usbip.8                   |  82 ++-
 tools/usb/usbip/doc/usbipa.8                  |  77 +++
 tools/usb/usbip/doc/usbipd.8                  |  29 +-
 tools/usb/usbip/libsrc/Makefile.am            |  11 +-
 tools/usb/usbip/libsrc/list.h                 |  24 +-
 tools/usb/usbip/libsrc/usbip_common.c         |  38 +-
 tools/usb/usbip/libsrc/usbip_common.h         |  27 +-
 tools/usb/usbip/libsrc/usbip_host_driver.c    |  24 +-
 tools/usb/usbip/libsrc/usbip_host_driver.h    |   1 +
 tools/usb/usbip/libsrc/usbip_ux.c             | 256 ++++++++
 tools/usb/usbip/libsrc/usbip_ux.h             |  30 +
 tools/usb/usbip/libsrc/vhci_driver.c          | 144 ++++-
 tools/usb/usbip/libsrc/vhci_driver.h          |  10 +-
 tools/usb/usbip/src/Makefile.am               |  31 +-
 tools/usb/usbip/src/usbip.c                   |  18 +-
 tools/usb/usbip/src/usbip.h                   |  20 +-
 tools/usb/usbip/src/usbip_attach.c            | 111 ++--
 tools/usb/usbip/src/usbip_bind.c              |  17 +-
 tools/usb/usbip/src/usbip_connect.c           | 236 +++++++
 tools/usb/usbip/src/usbip_detach.c            |  26 +-
 tools/usb/usbip/src/usbip_disconnect.c        | 212 ++++++
 tools/usb/usbip/src/usbip_list.c              |  99 +--
 tools/usb/usbip/src/usbip_netconn.c           | 133 ++++
 tools/usb/usbip/src/usbip_network.c           | 100 +--
 tools/usb/usbip/src/usbip_network.h           |  15 +-
 tools/usb/usbip/src/usbip_port.c              |  17 +-
 tools/usb/usbip/src/usbip_unbind.c            |  13 +-
 tools/usb/usbip/src/usbipd.c                  | 234 +------
 tools/usb/usbip/src/usbipd.h                  |  38 ++
 tools/usb/usbip/src/usbipd_app.c              | 256 ++++++++
 tools/usb/usbip/src/usbipd_dev.c              | 266 ++++++++
 tools/usb/usbip/src/utils.c                   |   2 +-
 tools/usb/usbip/src/utils.h                   |   2 +-
 tools/usb/usbip/websocket/INSTALL             | 237 +++++++
 tools/usb/usbip/websocket/Makefile.am         |   3 +
 tools/usb/usbip/websocket/README              | 184 ++++++
 tools/usb/usbip/websocket/autogen.sh          |   9 +
 tools/usb/usbip/websocket/cleanup.sh          |  12 +
 tools/usb/usbip/websocket/configure.ac        |  55 ++
 tools/usb/usbip/websocket/doc/usbws.8         | 192 ++++++
 tools/usb/usbip/websocket/doc/usbwsa.8        | 101 +++
 tools/usb/usbip/websocket/doc/usbwsd.8        | 109 ++++
 tools/usb/usbip/websocket/poco/Makefile.am    |  18 +
 .../usb/usbip/websocket/poco/USBWSCommand.cpp | 410 ++++++++++++
 tools/usb/usbip/websocket/poco/USBWSCommand.h |  99 +++
 .../usb/usbip/websocket/poco/USBWSDaemon.cpp  | 228 +++++++
 tools/usb/usbip/websocket/poco/USBWSDaemon.h  |  80 +++
 .../websocket/poco/USBWSRequestHandler.cpp    |  90 +++
 .../websocket/poco/USBWSRequestHandler.h      |  49 ++
 .../poco/USBWSRequestHandlerFactory.cpp       |  47 ++
 .../poco/USBWSRequestHandlerFactory.h         |  48 ++
 tools/usb/usbip/websocket/poco/USBWSUtil.h    |  52 ++
 .../usbip/websocket/poco/USBWSWebSocket.cpp   | 201 ++++++
 .../usb/usbip/websocket/poco/USBWSWebSocket.h |  69 ++
 70 files changed, 5336 insertions(+), 580 deletions(-)
 create mode 100644 drivers/usb/usbip/usbip_ux.c
 create mode 100644 drivers/usb/usbip/usbip_ux.h
 create mode 100644 include/uapi/linux/usbip_ux.h
 create mode 100644 tools/usb/usbip/doc/usbipa.8
 create mode 100644 tools/usb/usbip/libsrc/usbip_ux.c
 create mode 100644 tools/usb/usbip/libsrc/usbip_ux.h
 create mode 100644 tools/usb/usbip/src/usbip_connect.c
 create mode 100644 tools/usb/usbip/src/usbip_disconnect.c
 create mode 100644 tools/usb/usbip/src/usbip_netconn.c
 create mode 100644 tools/usb/usbip/src/usbipd.h
 create mode 100644 tools/usb/usbip/src/usbipd_app.c
 create mode 100644 tools/usb/usbip/src/usbipd_dev.c
 create mode 100644 tools/usb/usbip/websocket/INSTALL
 create mode 100644 tools/usb/usbip/websocket/Makefile.am
 create mode 100644 tools/usb/usbip/websocket/README
 create mode 100755 tools/usb/usbip/websocket/autogen.sh
 create mode 100755 tools/usb/usbip/websocket/cleanup.sh
 create mode 100644 tools/usb/usbip/websocket/configure.ac
 create mode 100644 tools/usb/usbip/websocket/doc/usbws.8
 create mode 100644 tools/usb/usbip/websocket/doc/usbwsa.8
 create mode 100644 tools/usb/usbip/websocket/doc/usbwsd.8
 create mode 100644 tools/usb/usbip/websocket/poco/Makefile.am
 create mode 100644 tools/usb/usbip/websocket/poco/USBWSCommand.cpp
 create mode 100644 tools/usb/usbip/websocket/poco/USBWSCommand.h
 create mode 100644 tools/usb/usbip/websocket/poco/USBWSDaemon.cpp
 create mode 100644 tools/usb/usbip/websocket/poco/USBWSDaemon.h
 create mode 100644 
tools/usb/usbip/websocket/poco/USBWSRequestHandler.cpp
 create mode 100644 tools/usb/usbip/websocket/poco/USBWSRequestHandler.h
 create mode 100644 
tools/usb/usbip/websocket/poco/USBWSRequestHandlerFactory.cpp
 create mode 100644 
tools/usb/usbip/websocket/poco/USBWSRequestHandlerFactory.h
 create mode 100644 tools/usb/usbip/websocket/poco/USBWSUtil.h
 create mode 100644 tools/usb/usbip/websocket/poco/USBWSWebSocket.cpp
 create mode 100644 tools/usb/usbip/websocket/poco/USBWSWebSocket.h

-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux