CUPS- the print spooler that wants to print via IPP-over-USB.
ippusb_manager- service that helps establish communication between the print spooler and
ippusb_bridge. Developed specifically for IPP-over-USB printing in Chromium OS.
ippusb_bridge- Chromium OS system service that proxies HTTP traffic over USB to an IPP-over-USB printer.
lpadminand to the
ippusb://scheme, then CUPS sends a request to
ippusb_managerto broker a socket for communication with the printer by way of
ippusb://scheme is specific to Chromium OS.
ippusb://scheme in CUPS configuration etc. on-device, but rewrite the URI to use the
ipp://scheme before communicating with the printer.
ippusb_bridge, checked by sending a keep-alive message on the latter socket.
CUPSwith the basename of the socket over which it can communicate with
ippusb_bridgeto preempt the latter from its timed idle exit.
ippusb_managerlistens for an explicit acknowledgement before declaring
ippusb_bridgealive and reusing the extant sockets.
ippusb_managertries to wait for the sockets to disappear (i.e. for
ippusb_bridgeto exit) before spawning a new instance.
ippusb_manager, as mentioned above.
ippusb_bridgereceives a keep-alive from
ippusb_manager, it resets the idle timer in anticipation of imminent activity.
CUPSand the printer via USB.
ippusbconnection for a given printer. HTTP requests over the connection are handled one at a time.
ippusbinterfaces on the printer until exit.
ippusb_bridgeare run from inside minijail instances and retain their own seccomp filters.
ippusb_bridge, the manager‘s seccomp filter must be a superset of ippusb_bridge’s.
(WRT ippusb_manager) why Unix sockets; why not D-Bus?
We didn't consider D-Bus at the time. The messages are quite simple and
CUPS already had code for dealing with Unix sockets.
Can a user plug in more than one USB printer?
Yes, as long as they do not appear to be the same (i.e. present identical VIDs and PIDs). We opine that this is an uncommon enough use case to be an issue.
Can ippusb_manager and ippusb_bridge have multiple clients?
Preliminary testing indicates that this should work. Sockets are connection-oriented, and an instance of
ippusb_bridge is spawned for each connected
Producing overview_diagram.png from overview_diagram.dot
To generate the overview diagram for the .dot definition, run the following commands:
dot -Tpng overview_diagram.dot -o overview_diagram.png
convert overview_diagram.png -colorspace gray -quality 91 overview_diagram.png
Note: This documentation is only accessible to Google employees.
See the design doc for information about the overall design and how
ippusb_manager fits into it.
For some discussion of why we migrated to
ippusbxd as discussed in the design doc), see go/ippusb-bridge-design.
This repository contains the following subdirectories:
|Upstart config files for launching |
|Source files for |
|Seccomp Policy files for restricting syscalls|
|udev rules for setting group permissions on ipp-usb printers|