Valgrind complains that sockaddr_qrtr isn't properly initialized, even
though all fields are initialized. So explicitly clear the
sockaddr_qrtrs.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Currently, offsetof produces an unsigned long, while qmi_elem_info's
offset member is a uint32_t. Since this is not the same type on all
platforms, this change uses a size_t for both. stddef.h is also
included for the standard offsetof definition, which also produces a
size_t.
This change also makes similar modifications to list.h.
The dprintf macro shadows a real libc symbol which is called
differently, so we should change it to something else (in this
case LOGD) and change it to use the libqrtr logging facilities.
This also means we should add a minimum priority to the logging
library so we don't log DEBUG-level messages by default.
Additionally there were some warn/warnx calls left over that
have been changed to PLOGW/LOGW respectively.
The "instance" id of a service is a composition of the instance id and
the version. In some plaeces in the library I made this two half words
instead of the actually expected 8 bits version + 24 bit instance. Fix
this in the library.
This was not spotted previously because all prior work has dealt with
instance id 0, but with the QRTR support in Diag this is now an issue.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Similar to qmi_decode_message(), qmi_decode_header() doesn't modify the
`struct qrtr_packet' argument. This patch makes qmi_decode_header() to
take a `const struct qrtr_packet' argument like qmi_decode_message()
does.
Contributed by Jacob Rutherford <jruthe@chromium.org>
This patch adds an extern "C" guard in libqrtr.h, so that it can be
included in both C and C++ projects.
Signed-off-by: Ben Chan <benchan@chromium.org>
This include provides err, errx, etc. but it looks like all
error logging in qmi.c is done with fprintf, so there's no
reason to include it.
Change-Id: I4f4a71323a55fca981ef8df994fe624a590e3802
Definition of AF_QIPCRTR was introduced in glibc in the following
commit and is only available since glibc 2.25 or later.
https://sourceware.org/git/?p=glibc.git;a=commit;h=acaff9b658720e4c887f4e44e6f28962d6f372d3
This patch modifies libqrtr.h to define AF_QIPCRTR if it isn't defined
in libc header, which allows compilation of libqrtr on a system with an
older version of glibc. The compiled libqrtr can still be used on a
system with kernel 4.7 or later with the QIPCRTR support.
Signed-off-by: Ben Chan <benchan@chromium.org>
The QMI functions can be used to deal with QMI-encoded data in
qrtr_packet objects. The structure-description is the same element-info
arrays as is used in the upstream Linux kernel.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
The qrtr_decode() takes a buffer of data and returns a decoded qrtr
packet object, this will either contain control data or a reference to
the message data.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
The uapi qrtr.h is extended with additional types and constants. Drop
the local qrtr.h to use the one from linux-headers and extend it
conditionally while we're waiting for the updated file.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
When sending a new_server message to the qrtr-ns the node and port in
the packet is ignored (to not allow clients spoofing the information),
so there's no reason to have this artificial check in the
qrtr_new_server() implementation either.
The socket will be bound to a port automatically when the new_server
message is sent out.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
There's no reason to require that the socket to be bound to a specific
port in order to register a lookup, the transmission of the lookup
request will autobind the socket to a port for us.
Also drop the node and port from the payload, as qrtr-ns will register
the lookup on the source sq, rather than the passed port.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Fix up the handling of endian translation and add support for decoding
new and del server messages.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
The two added functions can be used by an application to check if a
sockaddr is from the control port and for parsing the control messages
that is passed to registered clients.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>