aleksander/qmi-proxy

Aleksander Morgado aleksander at lanedo.com
Tue Sep 10 09:46:21 PDT 2013


On 09/06/2013 08:12 AM, Aleksander Morgado wrote:
>> > There's a new branch in upstream libqmi git repo called
>> > 'aleksander/qmi-proxy':
>> > 
>> > http://cgit.freedesktop.org/libqmi/log?h=aleksander%2Fqmi-proxy
>> > 
>> > This branch allows a QmiDevice to get opened with a new
>> > QMI_DEVICE_OPEN_FLAGS_PROXY flag; which will automatically launch a
>> > 'qmi-proxy' daemon which takes care of talking to the actual QMI port.
>> > 
>> > qmicli has also a new '--device-open-proxy' option to force using the
>> > 'qmi-proxy'.
>> > 
>> > Internally, there are only a couple of special things to consider.
>> > First, a new 'CTL Internal Proxy Open' request/response set that I made
>> > up so that the user of the libqmi-glib library tells the proxy which
>> > port it is interested in. Second, the communication between the proxy
>> > and the clients is done through an abstract socket with a
>> > well-known-name (\0qmi-proxy). All the messages between the proxy and
>> > its clients are QMI messages. And last, the QmiClientCtl in the proxy is
>> > shared between all remote clients, and the proxy takes care of fixing up
>> > the transaction ID for each remote client when using the CTL service.
>> > 
>> > The 'qmi-proxy' will exit itself if there are 30s of inactivity (i.e. no
>> > remote clients connected to it). If you want to debug the qmi-proxy
>> > itself, you can run it manually (before any other application requested
>> > to run it):
>> > 
>> >   $> sudo /usr/libexec/qmi-proxy --verbose
>> > 
>> > Each remote client will get the responses for its own requests only; and
>> > the proxy will also take care of forwarding indications only to the
>> > proper remote clients (e.g. matching service+cid or matching
>> > service+broadcast).
>> > 
>> > If you want to test it, set this libqmi branch in place, and do this
>> > simple change in ModemManager:
>> > 
>> > diff --git a/src/mm-qmi-port.c b/src/mm-qmi-port.c
>> > index a26fdab..efecf2e 100644
>> > --- a/src/mm-qmi-port.c
>> > +++ b/src/mm-qmi-port.c
>> > @@ -214,7 +214,7 @@ qmi_device_new_ready (GObject *unused,
>> >                        PortOpenContext *ctx)
>> >  {
>> >      GError *error = NULL;
>> > -    QmiDeviceOpenFlags flags = QMI_DEVICE_OPEN_FLAGS_VERSION_INFO;
>> > +    QmiDeviceOpenFlags flags = (QMI_DEVICE_OPEN_FLAGS_VERSION_INFO |
>> > QMI_DEVICE_OPEN_FLAGS_PROXY);
>> > 
>> > Once it's done, you will be able to run qmicli (with
>> > '--device-open-proxy') even if MM is running; which leaves the door open
>> > for applications which want to use QMI directly (got a couple of ideas
>> > already floating around). Of course, if multiple apps use the same modem
>> > at the same time in incompatible ways, bad things will happen :)
>> > 
>> > Comments and tests welcome!
>> > 
> Now that there is a 1.6 with all the latest changes I'd like to merge
> the aleksander/qmi-proxy branch in git master. Given that running with
> qmi-proxy is optional and needs to be explicitly requested (e.g. with
> "-p" in qmicli or with QMI_DEVICE_OPEN_FLAGS_PROXY), I don't think it's
> a big deal, but anyway wanted to ask first. Anyone has any major
> objection to merge the branch?
> 
> Once it's in git master I'll also make ModemManager (git master) use the
> proxy by default.

This is now available in git master.

-- 
Aleksander


More information about the libqmi-devel mailing list