mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-08-22 00:42:01 +02:00

Add a Python-based tool for translating XDR specifications into XDR encoder and decoder functions written in the Linux kernel's C coding style. The generator attempts to match the usual C coding style of the Linux kernel's SunRPC consumers. This approach is similar to the netlink code generator in tools/net/ynl . The maintainability benefits of machine-generated XDR code include: - Stronger type checking - Reduces the number of bugs introduced by human error - Makes the XDR code easier to audit and analyze - Enables rapid prototyping of new RPC-based protocols - Hardens the layering between protocol logic and marshaling - Makes it easier to add observability on demand - Unit tests might be built for both the tool and (automatically) for the generated code In addition, converting the XDR layer to use memory-safe languages such as Rust will be easier if much of the code can be converted automatically. Tested-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
23 lines
534 B
Django/Jinja
23 lines
534 B
Django/Jinja
{# SPDX-License-Identifier: GPL-2.0 #}
|
|
|
|
{% if annotate %}
|
|
/* Decode {{ result }} results */
|
|
{% endif %}
|
|
static int {{ program }}_xdr_dec_{{ result }}(struct rpc_rqst *req,
|
|
struct xdr_stream *xdr, void *data)
|
|
{
|
|
{% if result == 'void' %}
|
|
xdrgen_decode_void(xdr);
|
|
{% else %}
|
|
struct {{ result }} *result = data;
|
|
|
|
if (!xdrgen_decode_{{ result }}(xdr, result))
|
|
return -EIO;
|
|
if (result->stat != nfs_ok) {
|
|
trace_nfs_xdr_status(xdr, (int)result->stat);
|
|
return {{ program }}_stat_to_errno(result->stat);
|
|
}
|
|
{% endif %}
|
|
return 0;
|
|
}
|